2010-06-05 6 views
11

Gibt es eine Möglichkeit, das Layout eines C++ - Objekts mit dem G ++ - Compiler oder anderen Mitteln zu drucken. Ein vereinfachtes Beispiel (unter der Annahme int dauert 4 Byte)Drucklayout von C++ - Objekt mit g ++ - Compiler

class A{ 
    int a; 
}; 

class B:public A{ 
    int b; 
} 

so würde der Ausgang

seine
A- 
0  4 
+ a + 

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

Es wäre nützlich, um das Layout der Objekte zu verstehen (in meinem Fall virtuellen Maschinencode).

Vielen Dank im Voraus.

Grüße, Zaheer

Antwort

0

C++ nicht Innerlichkeit hat. Sobald Ihr Code kompiliert ist, ist jede Information über Klassen verloren, außer was typeid und std::type_info Ihnen geben kann.

+2

Ich glaube nicht, dass er über Laufzeit-Introspektion spricht, sondern über eine Compiler-Option, die ihm über das vom Compiler für die Objekte in seinem Code gewählte Speicherlayout Auskunft geben kann. –

10

Mit Blick auf die Manpages, -fdump-class-hierarchy vielleicht?

2

Die von Ihnen gesuchten Informationen werden von Debuggern benötigt und werden für sie ausgegeben, wenn Sie mit -g kompilieren. Auf ELF/DWARF-Plattformen (wie zB Linux) können Sie sehen, was durch Ausführung gibt es:

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

Auf anderen Plattformen objdump -g foo.o arbeiten können.

Für ELF/DWARF, pahole sieht wie ein guter Anfang aus.

Verwandte Themen