Ciò dipende da un milione di fattori diversi ed è interamente dipendente dalla piattaforma, dal compilatore e dalle impostazioni.
Il file oggetto deve contenere tutto il gruppo per i corpi delle funzioni per le funzioni con collegamento esterno, nonché tutte le variabili globali con collegamento esterno. Qualunque cosa abbia un collegamento interno può o meno garantire una voce separata nel file oggetto, in quanto potrebbero essere state ottimizzate e integrate direttamente nel loro sito di chiamata. Questo dipende fortemente dalle impostazioni di ottimizzazione.
GCC ha anche un'opzione per "ottimizzazioni del tempo di collegamento" che essenzialmente aggiunge una copia dell'intero codice sorgente al file oggetto e ne aumenta drasticamente le dimensioni.
I simboli di debug aggiungono anche molti dati aggiuntivi.
Per la tua domanda specifica per C++: una definizione di classe non è realmente visibile nell'assembly. Le funzioni membro non in linea sono solo più funzioni che devono essere compilate, mentre i membri dati sono trattati come i dati primitivi - saranno nello stack di chiamate se dichiarano istanze di quel tipo, ma non direttamente influire sul codice assembly ... a meno che tu non stia inizializzando le cose con costanti; le costanti entrano nel codice, ovviamente.
fonte
2011-09-06 12:02:12
Non tenterei di trarre alcuna conclusione tra la dimensione del file "obj" e la dimensione della dimensione dell'oggetto (memoria). Che cosa stai cercando di ottenere? –
Qui mi interessa la dimensione del file obj perché so che la dimensione dell'oggetto dipenderà dai membri dei dati che ha. Ma puoi dirmi che su quali fattori dipende la dimensione del file obj?In realtà mi è stato chiesto in un'intervista così volevo sapere la risposta. –