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
相关产品推荐
相关产品推荐

