Бинарные файлы необходимо скомпоновать с помощью отладочных символов, чтобы найти эту информацию. Вы можете прочитать информацию из символов отладки DWARF. Вот демонстрация:
Учитывая этот код:
#include <iostream>
struct MyType {
int a, b,c;
float d;
};
int main(int argc, char *argv[])
{
struct MyType t;
std::cout << sizeof(t);
}
Вы можете скомпилировать его с g++ -g demo.c
дамп отладочные символы с
objdump -W ./a.out
Там будет раздел, как
<1><13c7>: Abbrev Number: 20 (DW_TAG_structure_type)
<13c8> DW_AT_name : (indirect string, offset: 0x8af): MyType
<13cc> DW_AT_byte_size : 16
<13cd> DW_AT_decl_file : 1
<13ce> DW_AT_decl_line : 2
<13cf> DW_AT_sibling : <0x13fc>
Там мы идем, MyType имеет размер 16.
Если у двоичного файла нет отладочных символов, вам не повезло. Вам нужно знать место, где код имеет дело с размером типа, который вас интересует, разобрать двоичный код, найти ту часть кода.
Вы имеете в виду размер объекта, который был создан после создания, или пространство, которое занимает ваша реализация класса (код)? Это два совершенно разных вопроса. –
Попробуйте 'sizeof (myclass)'? –
@Mats Petersson: Объект, созданный однажды, занимает – Jailbroken