Dipende:
macro vengono convertite in programma di testo dal compilatore. Loro non rappresentano altro che il testo che li sostituisce, e non vivono oltre il tempo di compilazione (a meno che ... vedi sotto).
Le variabili locali e tali sono probabilmente rimossi, se non hanno un costruttore o un distruttore non banale. (Non si vuole qualcosa come scoped_lock
rimosso solo perché non si di riferimento in un secondo momento nel codice.) Lo stesso vale per le variabili e funzioni con collegamento interno (ad esempio definiti a namespace portata con la parola chiave static
). Nella maggior parte dei casi, tuttavia, le risorse necessarie per tali oggetti sono minime e il risparmio minimo.
Le funzioni sono leggermente diverse e dipendono. Una funzione virtuale verrà generalmente considerata "utilizzata" se c'è sempre un'istanza di questo tipo e sarà quasi certamente presente, anche se non si chiama mai .
Oltre questo (e questo vale anche per le variabili globali): è fino al linker. La granularità della maggior parte dei linker è il file oggetto che risulta dalla compilazione di una "unità di traduzione": il file oggetto è o non è parte del programma. Se il numero di telefono indica al linker di incorporare il file oggetto, è necessario aggiungere a tutto ciò che è contenuto. Se si inserisce il file oggetto nella libreria (statica) e si indica al linker di utilizzarlo, il programma di collegamento incorporerà il file oggetto nel programma if e solo se risolve un esterno non risolto altrimenti. Ma se lo incorpora il file oggetto, in genere incorpora tutto lo di esso. (Qualsiasi buona libreria metterà ciascuna funzione non virtuale in un file oggetto separato, in modo da non ottenere più del necessario.)
A questo proposito, le DLL si comportano come file oggetto (nonostante il loro nome ). Se si collegano i file oggetto in una DLL, il programma che lo utilizza otterrà tutta la DLL o nessuno.
Infine: sebbene non faccia parte del programma, i file oggetto e l'eseguibile finale conterranno spesso informazioni simboliche; i migliori sistemi manterranno anche le informazioni relative ai macro , in modo che il debugger possa visualizzare le cose nel modo in cui le ha scritte . (Quanto può fare a che fare con le macro è discutibile.)
fonte
2013-04-03 09:01:00
GCC genera sempre avvisi di variabile inutilizzati con '-Wall', quindi immagino di sì. I macro – Blender
sono irrilevanti, ma vedi http://stackoverflow.com/q/6215782/390913 – perreal