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

为何Coord结构体大小为40字节而非预期的12/24字节?

为啥sizeof(Coord)返回40字节?

嘿,这个问题挺典型的,我来帮你拆解一下背后的原因~

咱们一步一步算这个结构体的内存占用:

1. 成员的基础存储空间

先看结构体里的各个成员:

  • float inate[3]:3个float类型,每个float占4字节,加起来是 3*4=12 字节。
  • float& x、float& y、float& z:这里要注意C++中,类/结构体的非静态引用成员会被编译器实现为指针(毕竟引用本质是别名,但作为成员变量需要存储目标的地址)。在64位系统下,指针的大小是8字节,三个引用加起来就是 3*8=24 字节。

把这两部分加起来:12+24=36 字节。

2. 内存对齐的填充字节

这时候还没到40,差的就是编译器自动添加的对齐填充字节了。C++编译器会为结构体/类做内存对齐优化,规则是:整个结构体的大小必须是其「最大对齐单元」的整数倍。

  • 这里最大的对齐要求来自引用(也就是指针),64位系统下指针的对齐单元是8字节。
  • 36字节不是8的整数倍,最近的8的倍数是40,所以编译器会自动补上4字节的空白,把总大小凑到40字节。

补充:你之前猜测的误区

你觉得应该是12或24字节,问题出在这两个点上:

  • 12字节是只算了inate数组,但完全忽略了三个引用成员的存储空间;
  • 24字节可能是误以为引用作为“别名”不占内存,但非静态引用成员是需要存储地址的,和指针占用一样的空间,再加上数组的12字节,最后还要考虑对齐,最终就是40字节。

内容的提问来源于stack exchange,提问作者Greg S.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:22:31