[英]C++ get address and size of whole class
如何在 C++ 中獲取整個數據類的內存起始地址,例如 asm“lea”? 我可以獲得數據類(包括所有成員)的大小,例如 sizeof(main) 嗎?
class main
{
public:
int x;
int y;
bool xFlag;
bool yFlag;
...
} member1, member2, member3, member4;
你可以試試
#include <cstdio>
class Main {
public:
int x;
int y;
bool xFlag;
bool yFlag;
} member1, member2, member3, member4;
int main() {
printf("size of Main = %zu\n", sizeof member1);
printf("size of Main = %zu\n", sizeof(Main));
printf("address of member2 = %p\n", (void const *) & member2);
}
您可能會得到類似以下內容。 大小取決於系統是 32 位還是 64 位,下面的結果是在 32 位系統上。 地址可以是任何值。
size of Main = 12
size of Main = 12
address of member2 = 0x80497d4
如何在 C++ 中獲取整個數據類的內存起始地址,例如 asm“lea”?
你不能,因為當你定義一個類時,它只是編譯器的助手,你當時不分配存儲(靜態成員除外)。 要分配存儲,您應該定義一個對象,然后您將能夠獲得地址:
main m1; // allocated in data segment
int main() {
main m2; // allocated on stack
&m1 ; // take address of m1
&m2 ; // take address of m2
}
沒有“整體數據類”這樣的東西,有一個普通的舊數據類型。 從 C++11 開始,您可能應該尋找“指向標准布局結構類型對象的指針可以 reinterpret_cast 指向其第一個非靜態數據成員的指針”的StandardLayout 類型
我可以獲得數據類(包括所有成員)的大小,例如 sizeof(main) 嗎?
你可以用sizeof(main)
做到這一點
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.