较小堆栈边界的折衷是什么?

Kor*_* Ou 5 gcc memory-management

在gcc 4.5中,在调用函数时,堆栈必须与16字节边界对齐(以前的版本只需要4字节对齐).

对于32位机器,4字节是合理的.16字节很容易通过"和0xfffffff0,%esp"对齐.

但它可能比4字节边界花费更多的内存,不是吗?简而言之,我的问题是为什么gcc 4.5默认为16字节?它有价值吗?

非常感谢!

Fle*_*exo 3

现代处理器的许多向量扩展需要 16 字节对齐来加载/存储。某些架构提供未对齐的负载,但通常速度要慢得多。

对于 memcpy 和其他类似的低级操作来说,这种对齐可能会有一些好处,这些操作会更频繁地遇到更严格对齐的源/目的地。

此外,它几乎肯定会提高自动矢量化成功的机会,这是最近的 gcc 版本所包含的内容。