C++中,內存分為5個區:堆、棧、自由存儲區、全局/靜態存儲區和常量存儲區。
(注意:堆和自由存儲區其實不過是同一塊區域,new底層實現代碼中調用了malloc,new可以看成是malloc智能化的高級版本)
一. 堆與棧的討論:
二. 程序示例
通過下面的程序可以更好的對上面的概念進行理解。
int b; //main.cppint a = 0; //全局初始化區char *p1; //全局未初始化區main(){int b; //棧char s[] = "abc"; // 棧char *p2; //棧char *p3 = "123456"; // 123456/0在常量區,p3在棧上。static int c = 0; // 全局(靜態)初始化區p1 = (char *)malloc(10)p2 = (char *)malloc(20) // 分配得來得10和20字節的區域就在堆區。strcpy(p1, "123456"); // 123456/0放在常量區,編譯器可能會將它與p3所指向的"123456"優化成一個地方。}小結:
堆和棧的區別可以用如下的比喻來看出:
使用棧就象我們去飯館里吃飯,只管點菜(發出申請)、付錢、和吃(使用),吃飽了就走,不必理會切菜、洗菜等準備工作和洗碗、刷鍋等掃尾工作,他的好處是快捷,但是自由度小。使用堆就象是自己動手做喜歡吃的菜肴,比較麻煩,但是比較符合自己的口味,而且自由度大。(經典!)
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對武林網的支持。如果你想了解更多相關內容請查看下面相關鏈接
新聞熱點
疑難解答
圖片精選