news 2026/4/6 21:41:13

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/4/2 17:59:05

强化学习系统性学习笔记(一):从理论基础到策略优化

1.1 理论溯源:从生物学习到数学框架强化学习的思想源头可以追溯到生物行为心理学中的"试错学习"原理。在自然界中,生物个体通过反复尝试不同行为并观察环境反馈,逐步学会选择能够带来更好结果的行动策略。这一朴素而普适的学习模式…

作者头像 李华
网站建设 2026/3/18 2:06:28

想做大数据架构师,HCIP - 大数据认证是必备吗?

不少考了HCIP大数据认证的朋友吐槽:持证面试大数据架构师仍屡屡碰壁,甚至疑惑证书是否没用。结合同行转型经验与招聘实情,核心问题并非证书无效,而是大家缺失了认证之外的关键能力——这正是转型失败的主要原因。 一、先搞懂&…

作者头像 李华
网站建设 2026/3/26 13:19:00

基于微信小程序的校友惠超市管理系统【源码文末联系】

基于微信小程序的校友惠超市管理系统 三个角色(管理员,用户,超市) 效果如下: 商品信息详情页面 登陆页面 系统首页面 管理员页面 用户管理页面 商品分类页面 商品信息页面 用户首页 研究背景 在高校数字化转型浪潮…

作者头像 李华
网站建设 2026/4/3 3:14:32

Azure AI Search 性能优化实战:从 40 秒到 8 秒的优化之旅

背景 我们的知识库问答系统使用 Azure Container Apps + Azure AI Search + Azure OpenAI 构建,架构如下: 用户请求 → Container App → AI Search (向量搜索) → OpenAI (生成回答)系统上线后,性能表现不佳: P50 响应时间:18 秒 P99 响应时间:41 秒 最慢请求:40.9 秒…

作者头像 李华
网站建设 2026/4/6 17:48:17

碱性电解槽单元槽内流体均匀性设计探秘

碱性电解槽单元槽内流体均匀性设计,目前行业内单元槽主要分为圆形和方形结构单元槽,极板包括平板型,乳突型,棱型凹凸结构,分析单元槽内气液比,速度,压力,湍动能,涡分布&a…

作者头像 李华