筆試面試題目描述內(nèi)存分配方式以及它們的區(qū)別
描述內(nèi)存分配方式以及它們的區(qū)別
1) 從靜態(tài)存儲(chǔ)區(qū)域分配。
內(nèi)存在程序編譯的`時(shí)候就已經(jīng)分配好,這塊內(nèi)存在程序的整個(gè)運(yùn)行期間都存在。例如全局變量,static 變量。
2) 在棧上創(chuàng)建。
在執(zhí)行函數(shù)時(shí),函數(shù)內(nèi)局部變量的存儲(chǔ)單元都可以在棧上創(chuàng)建,函數(shù)執(zhí)行結(jié)束時(shí)這些存儲(chǔ)單元自動(dòng)被釋放。棧內(nèi)存分配運(yùn)算內(nèi)置于處理器的指令集。
3) 從堆上分配,亦稱動(dòng)態(tài)內(nèi)存分配。
程序在運(yùn)行的時(shí)候用malloc 或new 申請任意多少的內(nèi)存,程序員自己負(fù)責(zé)在何時(shí)用free 或delete 釋放內(nèi)存。動(dòng)態(tài)內(nèi)存的生存期由程序員決定,使用非常靈活,但問題也最多。
拓展:用縮寫的指針比較"if(p)" 檢查空指針是否可靠?如果空指針的內(nèi)部表達(dá)不是0會(huì)怎么樣?
當(dāng)C 在表達(dá)式中要求布爾值時(shí), 如果表達(dá)式等于0 則認(rèn)為該值為假, 否則為真。換言之, 只要寫出
if(expr)
無論“expr” 是任何表達(dá)式, 編譯器本質(zhì)上都會(huì)把它當(dāng)if((expr) != 0)處理。
如果用指針p 代替“expr” 則if(p) 等價(jià)于if(p != 0)。
而這是一個(gè)比較上下文, 因此編譯器可以看出0 實(shí)際上是一個(gè)空指針常數(shù), 并使用正確的空指針值。這里沒有任何欺騙; 編譯器就是這樣工作的, 并為、二者生成完全一樣的代碼?罩羔樀膬(nèi)部表達(dá)無關(guān)緊要。
布爾否操作符! 可如下描述:
!expr 本質(zhì)上等價(jià)于(expr)?0:1
或等價(jià)于((expr) == 0)
從而得出結(jié)論
if(!p) 等價(jià)于if(p == 0)
類似if(p) 這樣的“縮寫”, 盡管完全合法, 但被一些人認(rèn)為是不好的風(fēng)格
【筆試面試題目描述內(nèi)存分配方式以及它們的區(qū)別】相關(guān)文章:
筆試與面試的區(qū)別09-02
描述RIP和OSPF區(qū)別以及特點(diǎn)11-30
面試會(huì)計(jì)的筆試題目11-23
財(cái)務(wù)的面試筆試題目07-12
小升初面試常見筆試題目09-09
架構(gòu)面試筆試題目11-30
護(hù)士面試筆試題目09-09
企業(yè)面試筆試題目08-31
華為面試代碼筆試題目08-22