Распечатать макет объекта C ++ с помощью компилятора g ++ - PullRequest
11 голосов
/ 05 июня 2010

Есть ли способ напечатать макет объекта C ++, используя компилятор g ++ или любым другим способом. Упрощенный пример (при условии, что int занимает 4 байта)

class A{
  int a;
};

class B:public A{
  int b;
}

так что результат будет

A-
0      4
+  a   +

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

Было бы полезно понять расположение объектов (в моем случае код виртуальной машины).

Заранее спасибо.

С уважением, Захир

Ответы [ 3 ]

10 голосов
/ 05 июня 2010

Глядя на справочные страницы, -fdump-class-hierarchy возможно?

3 голосов
/ 07 июня 2010

Информация, которую вы ищете, нужна отладчикам и передается им при компиляции с -g. На платформах ELF / DWARF (таких как Linux) вы можете увидеть, что там, выполнив:

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

На других платформах objdump -g foo.o может работать.

Для ELF / DWARF pahole выглядит как хорошее место для старта.

0 голосов
/ 05 июня 2010

C ++ не имеет самоанализа. Как только ваш код скомпилирован, все данные о классах теряются, за исключением того, что typeid и std::type_info могут дать вам.

...