在gcc 4.5中,在调用函数时,堆栈必须与16字节边界对齐(以前的版本只需要4字节对齐)。
对于32位机器,4字节是合理的。 只需“和0xfffffff0,%esp”即可轻松对齐16字节。
但它可能比4字节边界花费更多的内存,不是吗? 简而言之,我的问题是为什么gcc 4.5默认为16字节?它有价值吗?
非常感谢!
答案 0 :(得分:3)
现代处理器的许多向量扩展需要16字节对齐加载/存储。某些体系结构提供未对齐的负载,但通常这些负载明显较慢。
对于memcpy和其他类似的低级操作,这种对齐可能会有一些好处,这些操作会更频繁地遇到更严格的对齐源/目的地。
此外,它几乎肯定会增加自动矢量化成功的机会,这是gcc最新版本所包含的内容。