Я хочу точно знать, сколько объектного кода генерируется GCC для каждой из единиц компиляции, но у меня возникла странная проблема, когда команда «size» из binutils не дает правильного результата.
Возьмем файл C, содержащий только эту функцию:
int foo (int a, int b)
{
return a+b;
}
Мы можем скомпилировать его и проверить размер кода объекта, используя как «size», так и «objdump»:
$ gcc -O foo.c -c
$ size foo.o
text data bss dec hex filename
52 0 0 52 34 foo.o
$ objdump -d foo.o
foo.o: file format elf64-x86-64
Disassembly of section .text:
0000000000000000 <foo>:
0: 8d 04 37 lea (%rdi,%rsi,1),%eax
3: c3 retq
Из вывода objdump видно, что размер кода объекта составляет 4 байта. Однако размер сообщает о 52 байтах, что неверно.
От использования опции «-D» до objdump похоже, что код обработки исключений и, возможно, некоторые другие вещи измеряются «размером» и добавляются к размеру кода, который меня действительно волнует. Кто-нибудь знает относительно простой способ получить размер, чтобы игнорировать эти дополнения?
-fno-exceptions -fno-unwind-tables
- person Marat Dukhan   schedule 18.03.2013