new物件陣列時的記憶體布局

2021-07-08 21:59:28 字數 1357 閱讀 7070

#include #include using namespace std;

#define safe_delete(x) \ \}

#define safe_delete_ary(x) \ \}

class ca

~ca() {}

void setter_m_itest(int iin)

int getter_m_itest()

private:

int m_itest;

};void fntestclass();

void clear_cin();

int main(int argc, char** argv, char** envp)

void fntestclass()

/** new物件陣列時的記憶體布局

+ pcaary 0x007d3ddc

007d3dd8 04 00 00 00 .... ; ///< 類陣列元素個數 = 4

007d3ddc 00 00 00 00 .... ; ///< 類陣列開始, ca[0]

007d3de0 01 00 00 00 .... ; ///< ca[1]

007d3de4 02 00 00 00 .... ; ///< ca[2]

007d3de8 03 00 00 00 .... ; ///< ca[3]

*/pcaary = new ca[icntary];

if (null != pcaary)

}safe_delete_ary(pcaary);

/** 手工模擬delete刪除單個物件

*/pca = new ca;

if (null != pca)

}/** 手工模擬delete刪除物件陣列

會報錯, 和實際情況不同

以後再研究 :(

*/// 會報錯, 和實際情況不同

// pcaary = new ca[icntary];

// if (null != pcaary)

//

// // free(pcaary); ///< ! crash

// pcaary = null;

// }

// 會報錯, 和實際情況不同

// pcaary = new ca[icntary];

// if (null != pcaary)

//

// // pcaary = null;

// }

}void clear_cin()

物件的記憶體布局

在hotspot虛擬機器中,物件在堆記憶體中的儲存布局可以劃分為三個部分 物件頭header 例項資料instance data和對齊填充padding hotspot虛擬機器的物件頭 有兩類資訊 物件自身的執行時資料 型別指標 mark word被設計成有著動態定義的資料結構,以便在極小的空間內儲...

陣列的記憶體布局

先看下面的例子 int a 5 1.記憶體布局的示意圖所有人都明白這裡定義了乙個陣列,其包含了5個int型的資料。我們可以用a 0 a 1 等來訪問陣列裡面的每乙個元素,那麼這些元素的名字就是a 0 a 1 嗎?看下面的示意圖 如上圖所示,當我們定義乙個陣列a時,編譯器根據指定的元素個數和元素的型別...

C 之建立物件時的new與不new

c 在建立物件的時候可以採用兩種方式 例如類名為test test test 或者 test ptest new test 這兩種方法都可以例項化乙個物件,但是這兩種方法有很大的區別,區別在於物件內容所在的記憶體空間不同,眾所周知,記憶體的分配方式有三種 1 從靜態儲存區域分配。內存在程式編譯的時候...