第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

堆棧分配,填充和對(duì)齊

堆棧分配,填充和對(duì)齊

C
開(kāi)滿天機(jī) 2019-09-02 16:50:06
我一直在努力深入了解編譯器如何生成機(jī)器代碼,更具體地說(shuō)是GCC如何處理堆棧。在這樣做的過(guò)程中,我一直在編寫簡(jiǎn)單的C程序,將它們編譯成匯編并盡力理解結(jié)果。這是一個(gè)簡(jiǎn)單的程序及其生成的輸出:asmtest.c:void main() {    char buffer[5];}asmtest.s:pushl   %ebpmovl    %esp, %ebpsubl    $24, %espleaveret讓我感到困惑的是為什么要為堆棧分配24個(gè)字節(jié)。我知道由于處理器如何尋址內(nèi)存,堆棧必須以4為增量進(jìn)行分配,但如果是這種情況,我們應(yīng)該只將堆棧指針移動(dòng)8個(gè)字節(jié)而不是24個(gè)。作為參考,緩沖區(qū)為17 bytes產(chǎn)生一個(gè)移動(dòng)40個(gè)字節(jié)的堆棧指針,并且根本沒(méi)有緩沖區(qū)移動(dòng)堆棧指針8. 1到16個(gè)字節(jié)之間的緩沖區(qū)移動(dòng)ESP24個(gè)字節(jié)?,F(xiàn)在假設(shè)8個(gè)字節(jié)是必要的常量(它需要什么?),這意味著我們分配16個(gè)字節(jié)的塊。為什么編譯器會(huì)以這種方式對(duì)齊?我正在使用x86_64處理器,但即使是64位字也只需要8字節(jié)對(duì)齊。為什么會(huì)出現(xiàn)差異?作為參考,我正在使用gcc 4.0.1運(yùn)行10.5的Mac上進(jìn)行編譯,并且未啟用任何優(yōu)化。
查看完整描述

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。


查看完整回答
反對(duì) 回復(fù) 2019-09-02
?
慕標(biāo)琳琳

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ō)明。


查看完整回答
反對(duì) 回復(fù) 2019-09-02
?
元芳怎么了

TA貢獻(xiàn)1798條經(jīng)驗(yàn) 獲得超7個(gè)贊

它在頁(yè)面底部有一些關(guān)于堆??赡芨蟮脑颉⒏拍顢U(kuò)展到64位機(jī)器,它可能會(huì)解釋您所看到的內(nèi)容。


查看完整回答
反對(duì) 回復(fù) 2019-09-02
?
幕布斯7119047

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)上情況并非如此......


查看完整回答
反對(duì) 回復(fù) 2019-09-02
  • 4 回答
  • 0 關(guān)注
  • 644 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)