簡體   English   中英

C++ 獲取整個類的地址和大小

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM