Mos*_*son 3 c memory x86-64 memory-alignment
GNU文档指出,它malloc在 64 位系统上与 16 字节倍数对齐。为什么是这样?
如果我的理解是正确的,寄存器和所有指令都对最大 8 字节宽的值进行操作。因此,似乎需要 8 字节对齐。
笔记:
x86_64x86_64 使用 xmm 寄存器(大量使用 - 所有 fp 内容都在 xmm 寄存器中完成,因为 8087 fp 寄存器已被弃用),并且 xmm 寄存器需要 16 字节对齐才能(有效)访问。
因此,x86_64 中的大多数内容(由 malloc 分配的堆栈和堆)都组织为始终 16 字节对齐,因此当涉及 xmm 寄存器时,编译器始终可以自由地使用“对齐”指令,而不需要使用(可能更慢)未对齐的指令。
在较新的硬件上,编译器甚至不需要麻烦地使用对齐指令——当内存对齐时,未对齐指令与对齐指令一样快。