Stack vs. Heap
whck6
影片中我覺得很重要的一張圖
Global
全域變數或是靜態變數。
Stack
可預期生命週期的變數或是函式,例如:區域變數,函式變數。
int f() {
int a;
a = ff();
return a;
}
int ff() {
return 10;
}
編譯器會知道變數的生命週期,像是上面的片段。程式會在 stack
放入變數 a
接著等待函式 ff
的返回,當 ff
返回時會從 stack
中釋放變數 a
,因此程式可以自我管理記憶體空間不需要開發者介入。
Heap
動態配置的空間,例如:指標。
int f() {
int *a;
a = (int*)malloc(sizeof(int)); // 配置記憶體
*a = 10;
free(a); //釋放記憶體
}
編譯器並不會知道何時要釋放變數 a
,因此開發者必須自行執行函式 free
將記憶體釋放。配置跟釋放有 malloc
free
跟 new
delete
.