new分配的記憶體一定在堆上麼?

2021-07-02 03:37:40 字數 964 閱讀 7414

執行環境在 ubuntu 14:05 上

#include #include #include int main (void)
在列印出程序pid的同時可以檢視a位址,之後檢視maps檔案內容確定 new分配的記憶體一定在堆上!

在這裡我先解釋一下,程式在記憶體中的分布情況。

**區:包含字面值常量,執行指令,函式位址,含有常屬性且初始化的全域性和靜態區域性變數。(唯讀)

資料區:不含有常屬性且初始化的全域性和靜態區域性變數

bss:不含有常屬性且不初始化的全域性和靜態區域性變數

堆:動態記憶體分配。從低位址到高位址擴散.

注:中間儲存動態庫或者靜態庫,為堆疊預留空間。

棧:非靜態區域性變數,函式形式引數和返回值.從高位址到低位址擴散.

命令列引數與環境區:命令列引數和環境變數。

bss和資料區統稱為 全域性區或靜態區。

從影象中可以明顯的看出new分配出來的記憶體存放在堆中。

在拓展一點 :

#include #include using namespace std;

int main (void)

這個**是為了證明,棧上的空間也可以給new分配的記憶體。

但是真能是我想的那樣,能分出很多麼

#include #include using namespace std;

int main (void)

這個為了證明,雖然我想分配200個位元組,但是現在buf沒有那麼大,所以最後輸出的他只分配了100個位址。

new動態分配記憶體(在堆上)

利用new生成動態無名變數 例如 int p1 double p2 p1 new int 12 1 p2 new double 100 2 delete p1 delete p2 1 分別表示動態分配了用於存放整型資料的記憶體空間,將初值12寫入該記憶體空間,並將首位址值返回指標p1。2 動態分配了...

經驗一定是正確的麼

一轉眼工作已經一年了,算得上有了一點經驗。對我來說,對個人的發展好像到達了乙個坎上,如果能順利邁過這個坎,今後還能快速成長,如果不能今後就庸庸碌碌了。我覺得比較重要的一點是要正確看待目前擁有的經驗。昨天發生一件事情,我在重灌nms驅動的時候,發現ct daemon無法啟動。按照經驗,我花了很長時間重...

C 記憶體分配new和malloc的區別

這裡有一篇講的很詳細new和malloc的區別 總結一下 1.new delete是操作符,malloc free是函式 2.malloc分配記憶體需指定大小,且只能是一般資料型別,分配成功返回void 需要強制型別轉換,分配失敗返回null,需手動檢查是否分配成功 new分配記憶體無需指定大小,可...