我已经读过这个问题:c ++中的struct padding和这一个为什么structof sizeof不等于每个成员的sizeof之和?
我知道这不是标准化的,但我仍然认为这是一个合法的问题.
为什么x64系统上的这个struct 16的大小?
struct foo { char* b; char a;};
Run Code Online (Sandbox Code Playgroud)
有效大小为8 + 1 = 9,但我知道有填充.无论如何,我认为a只会填充到达a的大小int,即与其他3个字节一起给出总共12个字节.
是否有任何理由为什么特定的编译器(gcc)认为它应该有16个字节的大小?
狂野猜测:有可能最大的类型(例如双倍或在这种情况下是x64指针)将指定要使用的填充吗?
owa*_*der 11
可能编译器正在将结构与8字节字边界对齐以提高访问速度.结构大小为9可能会在未对齐访问的情况下减慢CPU的速度(加上堆栈指针永远不应该在奇数地址上).大小为12(3个填充字节)可行,但某些操作(如FPU操作)更喜欢8或16字节的对齐.
| 归档时间: |
|
| 查看次数: |
668 次 |
| 最近记录: |