You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++包含string与int成员的类对象分配大小为何和预期不符

问题原因:内存对齐机制

你定义的student类没有虚函数,不存在虚表指针的额外开销,大小差异完全来自C++编译器默认的内存字节对齐规则,该规则的核心目的是提升CPU访问内存的效率,避免单次数据读取需要跨多个内存块操作。
具体到你的场景:

  • 类内两个成员的实际占用大小确实为 32字节(string) + 4字节(int) = 36字节
  • 64位系统下编译器默认的对齐系数为8字节,要求类的总大小必须是对齐系数的整数倍
  • 36不是8的整数倍,编译器会自动在int类型的age成员末尾填充4字节的空白内存,最终总大小就为40字节

你可以通过修改对齐系数验证这个结论,在类定义前添加预编译指令#pragma pack(4)指定按4字节对齐,此时编译运行得到的类大小就会是你预期的36字节。


内容的提问来源于stack exchange,提问作者Tushar Bharti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 11:24:04