C++ 中堆和棧的區別
在 C++ 中,堆和棧是兩種不同的內存區域,它們有許多區別。
從內存分配方式來看,棧是由編譯器自動分配和釋放的內存區域。當一個函數被調用時,函數內的局部變量、函數參數等會被壓入棧中,這些變量的內存空間在函數執行結束后會自動被釋放。例如,在下面的函數中:
void func() {int a = 5; // 這里的變量a存儲在棧中,當func函數結束后,a所占用的棧空間會自動釋放
}
而堆是由程序員手動分配和釋放的內存區域,使用new
或malloc
等操作符來分配內存。比如:
int* p = new int;
// 這里在堆上分配了一個int類型大小的空間,并且返回指向這個空間的指針p
釋放堆內存需要使用delete
(對于new
分配的內存)或者free
(對于malloc
分配的內存)。如果忘記釋放堆內存,就會造成內存泄漏。
從內存生長方向上,