Linux C華為面試題:
程序的局部變量存在於(堆棧)中,全局變量存在於(靜態區 )中,動態申請數據存在於( 堆)中。
一點小總結:
1、關於堆棧,印象最深的就是在做uboot移植,在你准備進入c代碼時,你必須給c代碼一個良好的運行環境,其中重要的一項就是設置堆棧。
2、關於靜態內存分配和動態內存分配的區別及過程
1) 靜態內存分配是在編譯時完成的,不需要占用CPU資源;動態分配內存是在運行時完成的,動態內存的分配與釋放需要占用CPU資源;
2) 靜態內存分配是在棧上分配的,動態內存是堆上分配的;
3) 動態內存分配需要指針或引用數據類型的支持,而靜態內存分配不需要;
4) 靜態分配內存需要在編譯前確定內存塊的大小,而動態分配內存不需要編譯前確定內存大小,根據運行時環境確定需要的內存塊大小,按照需要分配內存即可。可以這麼說,靜態內存分配是按計劃分配,而動態內存分配是按需分配。
5) 靜態分配內存是把內存的控制權交給了編譯器,而動態內存是把內存的控制權交給了程序員;
綜上所述,靜態分配內存適合於編譯時就已經可以確定需要占用內存多少的情況,而在編譯時不能確定內存需求量時可使用動態分配內存;但靜態分配內存的運行效率要比動態分配內存的效率要高,因為動態內存分配與釋放需要額外的開銷;動態內存管理水平嚴重依賴於程序員的水平,如果處理不當容易造成內存洩漏。