当前位置: 首页 > news >正文

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 编译时无法获取运行期的动态信息,只能计算指针本身的固有大小。
http://www.cnnetsun.cn/news/115454.html

相关文章:

  • mysql面试题整理
  • 瞄准科技特长生!3 大核心编程考级赛事(CTL/YCL/GESP)深度对比
  • day38打卡
  • JavaEE进阶——SpringBoot日志从入门到精通
  • 结构体简单题
  • 时间序列回归预测:LSTM、CNN - LSTM、PSO - CNN - LSTM、GAPSO - CNN - LSTM大比拼
  • 飞轮储能系统的建模与 MATLAB 仿真:永磁同步电机作为飞轮驱动电机
  • 车间进度总卡壳?生产小工单的3个必备功能,90%企业都用错了
  • 如何用 ShedLock 让 Spring Boot 的定时任务在多实例环境下只执行一次
  • 基于MPC的永磁同步电机非线性终端滑模控制仿真研究
  • ISSA - CNN - BiLSTM多输入单输出回归的Python实现与改进
  • Q学习(Q-learning)路径规划算法实战
  • ANSYS/LS - dyna防爆涂层砂浆砖框架结构爆破荷载损伤响应案例探索
  • 基于TOA/FOA的无源定位方法MATLAB仿真探索
  • 基于一致性算法改进的自适应虚拟阻抗控制:解决双机并联功率分布不均
  • springboot框架对接物联网,配置TCP协议依赖,与设备通信,让TCP变的如此简单
  • 微软和布朗大学最新发现:让AI助手拥有18000多种技能的革命性突破
  • MATLAB仿真:二维TOA传感器网络定位与时钟偏差拟合,最小二乘求解
  • 【参数辨识】基于卡尔曼滤波(KF)估计离散线性系统对垂直起降(VTOL)飞行器的鲁棒辨识附matlab代码
  • 桥梁与隧道安全守护者 抗冰冻型风速监测方案
  • 05-FreeRTOS的内存管理
  • 基于改进蛇优化算法(GOSO/ISO)优化随机森林数据回归预测模型(含初始化种群混沌映射、减法...
  • 基于大数据的人脸识别系统设计与实现开题报告
  • 车载 Android 系统稳定性问题全解析:从性能到黑屏的排查指南
  • 气象在线监测系统助力智慧环境管理,金叶仪器专业气象监测解决方案
  • 【TVM 教程】交叉编译与 RPC
  • 腾讯云国际站代理商的QAPM服务能提供哪些专属服务?
  • 网安副业怎么选?漏洞挖掘、技术博客、竞赛奖金实战,哪个更适配你?
  • 量子计算验证方法:软件测试从业者的转型指南
  • 突破 Oracle/MySQL 瓶颈:金仓数据库以三重革新,筑牢业务转型 “数据底座”