關(guān)于“椓硕模”的解析墨榄,查了一些資料,都是這么說的:“棧區(qū)(stack)— 由編譯器自動分配釋放揍拆,存放函數(shù)的參數(shù)值渠概,局部變量的值等∩┧”
從這句話中播揪,我的理解是:棧就是由編譯器本身進行自動分配和釋放的。
我一直很疑惑筒狠,代碼編譯生成可執(zhí)行文件后猪狈,安裝在其他設(shè)備上運行,哪里來的編譯器辩恼,編譯器不是在程序開發(fā)的階段才要用到的嗎雇庙?生成了可執(zhí)行文件谓形,不需要編譯器了吧,如果沒有有編譯器疆前,他怎么能夠?qū)Α皸寒跳!边M行自動分配和釋放呢?
有點頭大……
或許是網(wǎng)上的這個描述讓人產(chǎn)出誤解竹椒。
翻了翻這兩本書童太,對堆棧的描述進行了理解:
1.《深入理解計算機系統(tǒng)》1.7.3虛擬內(nèi)存
2.《Linux_UNIX系統(tǒng)編程手冊》6.3進程內(nèi)存布局
內(nèi)容挺多,我總結(jié)了一下胸完,應(yīng)該這么解析:代碼在編譯階段书释,編譯器只是指定了棧的生成規(guī)則,它告訴操作系統(tǒng)赊窥,棧應(yīng)該怎么分配爆惧,在哪里分配,分配多大锨能,編譯器并不會生成棧扯再,生成“棧”的這個動作腹侣,是程序在被安裝所在的機器設(shè)備上在運行的時候叔收,由系統(tǒng)完成的。
簡單一句話:編譯器確定生成棧的規(guī)則傲隶,由操作系統(tǒng)分配和管理饺律。