4 回答

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超6個(gè)贊
它是一個(gè)gcc功能,由-mpreferred-stack-boundary=n編譯器試圖保持堆棧上的項(xiàng)目對(duì)齊的位置控制2^n。如果更改n為2,則只會(huì)在堆棧上分配8個(gè)字節(jié)。默認(rèn)值n是4ie它將嘗試對(duì)齊到16字節(jié)邊界。
為什么有“默認(rèn)”的8個(gè)字節(jié),然后24 = 8 + 16個(gè)字節(jié)是因?yàn)闂R呀?jīng)包含8個(gè)字節(jié)的leave和ret,所以編譯后的代碼必須是8個(gè)字節(jié)首先調(diào)整堆得到它對(duì)齊到2 ^ 4 = 16。

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超9個(gè)贊
SSEx系列指令要求打包128位向量以對(duì)齊16個(gè)字節(jié) - 否則會(huì)出現(xiàn)嘗試加載/存儲(chǔ)它們的段錯(cuò)誤。即如果你想安全地傳遞16字節(jié)向量以便在堆棧上使用SSE,則堆棧需要始終保持與16對(duì)齊。默認(rèn)情況下,GCC會(huì)對(duì)此進(jìn)行說(shuō)明。

TA貢獻(xiàn)1798條經(jīng)驗(yàn) 獲得超7個(gè)贊
它在頁(yè)面底部有一些關(guān)于堆??赡芨蟮脑颉⒏拍顢U(kuò)展到64位機(jī)器,它可能會(huì)解釋您所看到的內(nèi)容。

TA貢獻(xiàn)1794條經(jīng)驗(yàn) 獲得超8個(gè)贊
Mac OS X / Darwin x86 ABI需要16字節(jié)的堆棧對(duì)齊。在Linux,Win32,F(xiàn)reeBSD等其他x86平臺(tái)上情況并非如此......
- 4 回答
- 0 關(guān)注
- 644 瀏覽
添加回答
舉報(bào)