news 2026/9/2 21:45:12

sizeof 核心原理:编译期的 “内存大小计算器”

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
sizeof 核心原理:编译期的 “内存大小计算器”

sizeof 是 C 语言的编译期运算符(非函数),核心作用是计算「数据类型或变量」的固有内存大小,结果在编译时就已确定,与运行期逻辑无关。

一、核心原理拆解

  1. 计算时机:编译期完成,不执行表达式
    • sizeof 不会运行括号内的表达式,仅通过表达式的 “类型” 推导大小。
    • 示例:int a=5; sizeof(a++); 中,a++ 不会执行(a 仍为 5),仅计算 int 类型大小(4 字节)。
  1. 计算对象:只关注 “固有类型”,不关心 “实际存储内容”
    • 对变量:等价于 sizeof(变量的类型)(如 sizeof(c) 等价于 sizeof(int*),c 是 int* 指针)。
    • 对类型:直接返回该类型的标准内存大小(如 sizeof(int)=4、sizeof(double)=8)。
  1. 大小规则:由类型和系统位数决定,与运行期状态无关
    • 基础类型(int、char 等):大小是语言标准或编译器规定的固定值(如 char 恒为 1 字节)。
    • 指针类型(任意 T*):大小由系统位数决定(64 位 = 8 字节,32 位 = 4 字节),与指向的类型无关。
    • 复合类型(数组、结构体):数组 sizeof(arr) = 元素个数 × 元素类型大小;结构体需考虑内存对齐(默认按最大成员类型对齐)。

二、关键误区

  • 为什么 sizeof(int* c) 是 8 字节?→ 因为 int* 是指针类型,64 位系统中所有指针类型的固有大小都是 8 字节。
  • 为什么 sizeof(c[3]) 是 4 字节?→ 因为 c[3] 的类型是 int,int 的固有大小是 4 字节,下标不改变类型。
  • 为什么 sizeof 拿不到堆内存大小?→ 堆内存是运行期 malloc 动态分配的,sizeof 编译时无法获取运行期的动态信息,只能计算指针本身的固有大小。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/3 15:48:14

mysql面试题整理

1.mysql mvcc 机制 在 MySQL 面试中,MVCC(Multi-Version Concurrency Control,多版本并发控制)是一个高频考点,主要考察候选人对事务隔离级别和并发控制机制的理解。以下是针对 MVCC 的核心知识点总结:1. m…

作者头像 李华
网站建设 2026/9/3 17:05:43

瞄准科技特长生!3 大核心编程考级赛事(CTL/YCL/GESP)深度对比

一、核心推荐:两大权威编程考级赛事 (一)全国青少年计算思维等级测评活动(CTL 等级测评) 官网:智启未来-青少年人工智能素养提升公益计划 作为以 C 编程语言为核心的人工智能能力测评体系,CTL …

作者头像 李华
网站建设 2026/9/2 20:59:25

day38打卡

import torch from torch.utils.data import Dataset, DataLoader from torchvision import datasets, transforms import matplotlib.pyplot as plt# # 1. 深入理解 Dataset (自定义演示) # class SimpleNumberDataset(Dataset):def __init__(self, start, end):# 模拟数据&…

作者头像 李华
网站建设 2026/9/3 11:17:24

JavaEE进阶——SpringBoot日志从入门到精通

目录 Spring Boot 日志详解:从入门到精通(新手版) 1. 日志概述:为什么要学? 1.1 从System.out.println到专业日志框架 2. 日志使用:手把手教你写代码 2.1 打印日志:第一个日志程序 知识点…

作者头像 李华
网站建设 2026/9/3 1:03:03

结构体简单题

1.这里主要是sort函数 配上自定义的函数(题目要求同分的要求名字按ascll表从小到大排序)还有就是vector数组再使用sort函数时不能使用(arr,arrn)关于sort函数:所以就是说你在return比较用了>就是按降序排…

作者头像 李华