2010-10-26 57 views
5

在gcc 4.5中,調用函數時,堆棧必須與16字節邊界對齊(以前的版本只需要4字節對齊)。小堆棧邊界的折衷是什麼?

對於32位機器,4字節是合理的。 16字節很容易通過「和0xfffffff0,%esp」對齊。

但它可能比4字節邊界花費更多的內存,不是嗎? 總之,我的問題是爲什麼gcc 4.5以16字節爲默認值?它有價值嗎?

非常感謝!

回答

3

許多用於現代處理器的向量擴展需要16個字節對齊加載/存儲。一些體系結構提供未對齊的負載,但通常這些速度要慢得多。

memcpy和其他類似的低級別操作更頻繁地遇到更嚴格對齊的源/目標可能會有一些好處。

此外,它幾乎可以肯定地提高了自動矢量化成功的可能性,這是近期gcc版本所包含的內容。