13

g++ コンパイラまたはその他の手段を使用して C++ オブジェクトのレイアウトを出力する方法はありますか。簡単な例 (int が 4 バイトと仮定)

class A{
  int a;
};

class B:public A{
  int b;
}

したがって、出力は次のようになります

A-
0      4
+  a   +

B-
0      4      8
+ A.a  +  b   +

オブジェクトのレイアウト (私の場合は仮想マシン コード) を理解しておくと役立ちます。

前もって感謝します。

よろしく、ザヒール

4

3 に答える 3

10

マニュアルページを見て、-fdump-class-hierarchy多分?

于 2010-06-05T08:07:21.787 に答える
4

求める情報は、デバッガーが必要とし、 でコンパイルするときに出力されます-g。ELF/DWARF プラットフォーム (Linux など) では、次のコマンドを実行して何が表示されるかを確認できます。

g++ -g -c foo.cc
readelf -w foo.o

他のプラットフォームでobjdump -g foo.oは、動作する可能性があります。

ELF/DWARF の場合、paholeから始めるのが良いようです。

于 2010-06-07T03:04:40.233 に答える
1

C++には内省がありません。コードがコンパイルされると、クラスに関するすべての情報は、何typeidstd::type_info提供できるかを除いて失われます。

于 2010-06-05T07:59:23.983 に答える