Voglio sapere con precisione quanto codice di oggetti viene generato da GCC per ciascuna raccolta di unità di compilazione, ma sto avendo uno strano problema in cui il comando "size" di binutils non sta dando il risultato corretto.come determinare la dimensione del codice oggetto su Linux quando "size" dà la risposta sbagliata?
Diamo un file C che contiene questa funzione solo:
int foo (int a, int b)
{
return a+b;
}
Siamo in grado di compilarlo e verificare la dimensione del codice oggetto utilizzando sia "formato" e "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
Dalla uscita objdump, è chiaro che la dimensione del codice oggetto è di 4 byte. Tuttavia, la dimensione riporta 52 byte, che non è corretto.
Da usare l'opzione "-D" per objdump, sembra che il codice di gestione delle eccezioni e forse qualche altra cosa venga misurato dalla "dimensione" e aggiunto alla dimensione del codice che effettivamente mi interessa. Qualcuno sa un modo relativamente semplice per ottenere dimensioni per ignorare questi extra?
Provare a ricompilare con '-fno-eccezioni -fno-rilassarsi-tables' –
Marat, purtroppo queste opzioni sembrano non avere effetto, il file .o è esattamente lo stesso. Questo è gcc 4.7.2 su x86-64. Cercherò alcune opzioni aggiuntive che potrebbero fare il lavoro ... –
Aha, queste opzioni insieme danno il risultato desiderato: -fno-exceptions -fno-unwind-tables -fno-asincrono-unwind-tables –