Подтвердить что ты не робот

Макет печати объекта С++ с компилятором g++

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

class A{
  int a;
};

class B:public A{
  int b;
}

поэтому выход будет

A-
0      4
+  a   +

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

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

Спасибо заранее.

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

4b9b3361

Ответ 1

Посмотрите на страницы руководства, -fdump-class-hierarchy может быть?

Ответ 2

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

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

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

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

Ответ 3

У С++ нет интроспекции. Как только ваш код будет скомпилирован, каждая часть информации о классах будет потеряна, за исключением того, что могут дать вам typeid и std::type_info.