堆與棧的區別:
記憶體的分配方式和回收方式不同:
棧是後進先出,可以用一個簡單程式例子可以體現出棧的後進先出:
void test1(){
int num2;
test3
}
void test2(){
int num3;
int main(){
int num1;
test1();
程式執行過程說明 : 先給num1分配記憶體,然後呼叫test1後在給num2分配記憶體
接著呼叫test2後給num3分配 分配順序是num1,num2,num3
先是呼叫完test2後回收num3的記憶體,接著呼叫完test1回收num2,最後呼叫完main函式
回收num1, 回收的順序是 num3,num2,num1
體現後分配的先回收(後進先出)
堆區記憶體是手動(new)分配,手動(delete)回收的
2.棧區記憶體的分配大小受到限制,比如:棧分配的記憶體最大為1M(也有說2M,4M說法),
但堆區記憶體空間很大,幾十M甚至上G的記憶體都可以分配
以上只是堆與棧的部分區別
堆與棧的區別:
記憶體的分配方式和回收方式不同:
棧是後進先出,可以用一個簡單程式例子可以體現出棧的後進先出:
void test1(){
int num2;
test3
}
void test2(){
int num3;
}
int main(){
int num1;
test1();
}
程式執行過程說明 : 先給num1分配記憶體,然後呼叫test1後在給num2分配記憶體
接著呼叫test2後給num3分配 分配順序是num1,num2,num3
先是呼叫完test2後回收num3的記憶體,接著呼叫完test1回收num2,最後呼叫完main函式
回收num1, 回收的順序是 num3,num2,num1
體現後分配的先回收(後進先出)
堆區記憶體是手動(new)分配,手動(delete)回收的
2.棧區記憶體的分配大小受到限制,比如:棧分配的記憶體最大為1M(也有說2M,4M說法),
但堆區記憶體空間很大,幾十M甚至上G的記憶體都可以分配
以上只是堆與棧的部分區別