動態記憶體與靜態記憶體的區別

2021-07-11 03:37:53 字數 508 閱讀 4005

1. 靜態記憶體

靜態記憶體是指在程式開始執行時由編譯器分配的記憶體,它的分配是在程式開始編譯時完成的,不占用cpu資源。

程式中的各種變數,在編譯時系統已經為其分配了所需的記憶體空間,當該變數在作用域內使用完畢時,系統會

自動釋放所占用的記憶體空間。

變數的分配與釋放,都無須程式設計師自行考慮。

eg:基本型別,陣列

2. 動態記憶體

使用者無法確定空間大小,或者空間太大,棧上無法分配時,會採用動態記憶體分配。

3. 區別

a) 靜態記憶體分配在編譯時完成,不占用cpu資源; 動態記憶體分配在執行時,分配與釋放都占用cpu資源。

b) 靜態內存在棧(stack)上分配; 動態記憶體在堆(heap)上分配。

c) 動態記憶體分配需要指標和引用型別支援,靜態不需要。

d) 靜態記憶體分配是按計畫分配,由編譯器負責; 動態記憶體分配是按需分配,由程式設計師負責。

C語言靜態記憶體分配與動態記憶體分配

c語言中,記憶體主要分為5個區,分別為棧區 堆區 全域性 靜態儲存區 常量儲存區 區。其中 區存放源程式的二進位制 其餘四個區都儲存程序執行過程中需要的儲存的變數。變數的記憶體分配有兩種 靜態與動態。靜態記憶體分配在編譯時就對變數分配空間,而動態記憶體分配直到程式執行時再進行分配。使用靜態記憶體分配...

靜態記憶體分配和 動態記憶體分配

1 靜態記憶體分配是在編譯時完成的,不需要占用cpu資源 動態分配記憶體是在執行時完成的,動態記憶體的分配與釋放需要占用cpu資源 2 靜態記憶體分配是在棧上分配的,動態記憶體是堆上分配的 3 動態記憶體分配需要指標或引用資料型別的支援,而靜態記憶體分配不需要 4 靜態分配記憶體需要在編譯前確定記憶...

靜態記憶體和動態記憶體,C語言

include include int main p 0 a free p 釋放就是登記登出 占有空間就是登記一下 當free 釋放後 所以除非程序結束,否則空間是不會釋放的 return 0 include int func void 如果建立不成功的時候 return p int main vo...