Questo non può essere risolto obiettivamente senza conoscere la lingua.
Qui ci sono spiegazioni per due lingue che coprono molti dei punti generalmente importanti.
C ++
In genere, alcuni codici verranno duplicati mentre altri non lo faranno. Ovviamente le funzioni inline saranno duplicate e questo include qualsiasi codice nella dichiarazione di classe implicitamente in linea. Il codice che viene definito separatamente non verrà duplicato.
Le classi di modelli (ad esempio i contenitori STL) sono normalmente duplicate poiché normalmente hanno la dichiarazione e la definizione combinate (vedi punto precedente).
I linker possono eseguire le proprie ottimizzazioni per combinare codice come questo, anche se in pratica non credo che sia comune.
Senza una JVM o una CLR per scimmiottare con la memoria in fase di esecuzione, qualunque cosa sia compilata è altamente probabile che sia ciò che viene caricato in memoria in fase di esecuzione.
Java
Il codice byte non verrà duplicato (cioè nei file .class
). A causa della natura dei file di classe che possono essere compilati e manipolati separatamente, non vi sarà alcuna duplicazione o ottimizzazione tra le classi. Tuttavia, il compilatore JIT è gratuito per il codice inline in fase di runtime, che lo duplicherebbe in memoria.
Fonti: Opzioni Java HotSpot VM - JRockit (ci sono alcuni riferimenti ma poca documentazione ufficiale di Oracle su questo argomento)