類的記憶體儲存區域

2021-06-15 02:59:38 字數 1279 閱讀 6974

眾所周知,new出來的變數,申請的記憶體都是儲存在堆區;

理論上來說是這樣子的,但是有時候看到int i ,千萬不要脫口而出是棧記憶體,因為不一定,尤其在c++類中,需要重點注意。

**如下:

class cls_memory

;#include "cls_memory.h"

cls_memory::cls_memory()

cls_memory::~cls_memory()

void cls_memory::printaddress()

int main(int argc, char* argv)

編譯後,執行結果如下:

[root@localhost src]# g++ -g -o memory cls_memory.cpp

[root@localhost src]# ./memory

m_mem1 address is bfb009e8 .

//m_mem1變數在棧記憶體中,類大小為256 + 4 = 260 = 0x104

m_pmem2 self address is bfb00ae8 .

//m_pmem2指標變數本身在棧記憶體中

m_pmem2 point address is 8cb0008 .

//m_pmem2指標變數指向的記憶體本身在堆記憶體中

m1 address = bfb009e8

//棧記憶體中

******************************=

m_mem1 address is 8cb00d8 .

// 這可以看出來是在堆記憶體中

m_pmem2 self address is 8cb01d8 .

//m_pmem2指標變數本身在堆記憶體中 8cb01d8 = 8cb00d8+hex(256)

總結:

如果乙個類物件是new出來的,則類的內部所有資料都儲存在堆區。

如果乙個類物件是非new建立的,則類的內部資料儲存區域再根據棧申請還是堆申請來對待。

對記憶體中儲存區域的再認識

在開始學習程式設計的時候,我們不會再定義變數時考慮過多,但是隨著學習的深入,知道我們遇到了const static 指標.這些常常涉及到記憶體區域的時候,我們顯得十分無知。程式中的動態儲存區 靜態儲存區 堆疊究竟是什麼東西?所謂靜態,就是一定會存在的而且會永恆存在 不會消失,這樣的資料報括常量 常變...

C語言程式的儲存區域 記憶體布局

c語言程式的儲存區域 由c語言 文字檔案 形成可執行程式 二進位制檔案 需要經過編譯 彙編 連線三個階段。編譯過程把c語言文字檔案生成匯程式設計序,彙編過程把匯程式設計序形成二進位制機器 連線過程則將各個原始檔生成的二進位制機器 檔案組合成乙個檔案。c語言編寫的程式經過編譯 連線後,將形成乙個統一檔...

C C 程式記憶體中變數儲存區域的溫習

四 總結 c語言在記憶體中分為下列幾個區 記憶體棧區 存放區域性變數名 記憶體堆區 存放new或者malloc出來的物件 常數區 存放區域性變數或者全域性變數的值 靜態區 用於存放全域性變數或者靜態變數 區 二進位制 接下來我們用c語言來檢視位址的變化 include include include...