结构的大小超过预期

Dea*_*ean 2 c++ memory struct

我已经读过这个问题: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字节的对齐.