眾所周知,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...