news 2026/7/17 20:19:27

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/7/17 0:21:16

电动汽车负荷随机性下的蓄电池容量优化配置:MATLAB实现与探索

MATLAB代码:考虑电动汽车负荷随机性的蓄电池容量优化配置 关键词:蓄电池容量优化配置 储能优化配置 中长期配置 并网波动性 参考文档:《不确定环境下并网型光储微电网的容量规划》《考虑电动汽车有序充电的光储充电站储能容量优化策略_李景…

作者头像 李华
网站建设 2026/7/16 19:52:17

让YOLO飞起来:从CPU到GPU的配置指南

最近在配置YOLO(You Only Look Once)进行物体检测和图像分割任务时,发现默认安装的情况下,YOLO使用的是CPU进行计算。这对于需要处理大量图像或实时检测的任务来说,效率明显不足。本文将详细介绍如何将YOLO从CPU模式切…

作者头像 李华
网站建设 2026/7/16 17:52:26

磁链观测器:从仿真到闭环代码实现

磁链观测器(仿真+闭环代码参考文档) 1.仿真采用simulink搭建,2018b版本 2.代码采用Keil软件编译,思路参考vesc中使用的方法,自己编写的代码能够实现0速闭环启动,并且标注有大量注释,方便学习。 …

作者头像 李华
网站建设 2026/7/17 4:34:20

单机版RS485集中抄表软件:探索电表数据采集的奥秘

单机版RS485集中抄表软件,集中抄读645-2007协议的智能电表,645-1997的没有测试过,不清楚能不能抄,本地485有线集中抄表,配合485转网络可实现远程抄表在电力数据采集领域,单机版RS485集中抄表软件发挥着至关…

作者头像 李华
网站建设 2026/7/17 1:37:38

探索EKF算法在机器人轨迹定位中的神奇魅力

EKF算法做机器人轨迹定位/跟踪的程序,与里程计算法进行对比,结果显示EKF算法定位/跟踪精度更高。 纯里程计的误差为 error_Odom_average 1.0283 Ekf定位的误差为 error_Ekf_average 0.071629在机器人领域,轨迹定位和跟踪可是至关重要的任务…

作者头像 李华
网站建设 2026/7/17 12:42:09

echarts4升级为echarts5的常见问题

[ECharts] DEPRECATED: textStyle hierarchy in label has been removed since 4.0. All textStyle properties are configured in label directly now.[ECharts]已弃用:标签中的textStyle层次结构自4.0以来已被删除。现在,所有textStyle属性都直接在标签…

作者头像 李华