內(nèi)核棧的使用
出處:computer00 發(fā)布于:2008-08-19 11:06:27
今天和一個(gè)朋友聊天,朋友說在編寫驅(qū)動(dòng)時(shí)遇到一個(gè)怪異的問題。他在內(nèi)核中使用了一個(gè)深度函數(shù)調(diào)用(多層嵌套的函數(shù)),但沒有實(shí)現(xiàn)預(yù)定的效果,但如果把嵌套去掉,函數(shù)就沒問題了。當(dāng)時(shí)我也沒有多想,就回答可能是編譯器的問題?;貋砗箢^腦中又浮現(xiàn)出這個(gè)問題,突然想到內(nèi)核棧,覺得這個(gè)問題的原因應(yīng)該出在內(nèi)核棧上。下面簡要介紹下內(nèi)核的知識(shí)。
用戶空間運(yùn)行的程序可以從用戶空間的棧上分配大量的空間來存放變量或數(shù)組、大的結(jié)構(gòu)體。之所以可以這么做,是因?yàn)橛脩艨臻g棧本身比較大,而且還能動(dòng)態(tài)增長。進(jìn)程的內(nèi)核棧即不大也不能動(dòng)態(tài)增長;它在32位機(jī)上的內(nèi)核棧為8KB,而64位機(jī)是16KB。
每個(gè)進(jìn)程都有自己的內(nèi)核棧。進(jìn)程在內(nèi)核執(zhí)行期間的每個(gè)調(diào)用鏈必須放在自己的內(nèi)核棧上。中斷處理程序也使用配它們打斷的進(jìn)程堆棧。這就意味著,在惡劣的情況下,8KB的內(nèi)核棧可能會(huì)被多個(gè)函數(shù)的嵌套調(diào)用鏈和幾個(gè)中斷程序來共享。呵呵,顯然深度的嵌套會(huì)導(dǎo)致溢出了。
節(jié)省內(nèi)核棧的方法有:減少局部變量、大型數(shù)組和結(jié)構(gòu)體、嵌套調(diào)用鏈。
欲知詳情,請登錄維庫電子市場網(wǎng)(m.58mhw.cn)
版權(quán)與免責(zé)聲明
凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://m.58mhw.cn,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。
如涉及作品內(nèi)容、版權(quán)等問題,請?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
- 什么是氫氧燃料電池,氫氧燃料電池的知識(shí)介紹2025/8/29 16:58:56
- SQL核心知識(shí)點(diǎn)總結(jié)2025/8/11 16:51:36
- 等電位端子箱是什么_等電位端子箱的作用2025/8/1 11:36:41
- 基于PID控制和重復(fù)控制的復(fù)合控制策略2025/7/29 16:58:24
- 什么是樹莓派?一文快速了解樹莓派基礎(chǔ)知識(shí)2025/6/18 16:30:52









