Overhead delle dimensioni del codice includendo file di intestazione extra inutilmente

2

Ho un programma che include molti file di intestazione ma non usa tutti i file di intestazione. Ho rimosso alcuni di loro anche se sta funzionando bene. Non ho notato alcun cambiamento nella performance. Questo influenzerà la dimensione del codice o qualcos'altro. Posso includere i file di intestazione quanto voglio senza influire sulle dimensioni del codice e sulle prestazioni.
Voglio dire se includo tutte le intestazioni in un file di intestazione separato, quindi chiamo solo questo file di intestazione in tutti i miei programmi. Funzionerà normalmente?

    
posta Stark 04.02.2016 - 13:59
fonte

2 risposte

2

In generale, inclusi i file di intestazione extra non dovrebbero aumentare le dimensioni o influire sulle prestazioni del tuo codice compilato, ma è ancora una pratica molto negativa.

Quando lavori a un progetto con centinaia o migliaia di file sorgente, devi ricostruire il minor numero di file possibile quando apporti una modifica a un file di intestazione. Se ogni file sorgente include ogni file di intestazione, dovrai ricostruire tutto ogni volta che tocchi qualsiasi file di intestazione.

Su una nota correlata, quando possibile usa una dichiarazione in avanti invece di includere un file di intestazione in un altro file di intestazione, ad esempio, fai questo:

class bar;
class foo
{
  private: bar* that;
}

invece di:

#include <bar.h>
class foo
{
  private: bar* that;
}
    
risposta data 04.02.2016 - 14:58
fonte
1

Se stai parlando di C o C ++, allora no - tutto ciò che accade è che il tuo tempo di compilazione viene rallentato mentre il compilatore deve leggere e analizzare tutti i file di intestazione extra.

Questo può essere significativo, specialmente se le intestazioni includono altre intestazioni che includono .. hai l'idea. Il tempo di compilazione può aumentare notevolmente (al punto che alcuni compilatori come gli studi visivi memorizzano i risultati in "intestazioni precompilate")

Il compilatore produce eseguibili binari che fanno ciò che il codice gli dice di fare, quindi qualsiasi informazione di intestazione non necessaria viene semplicemente ignorata. Lo stesso può dirsi per qualche codice, se il compilatore può dire che non è necessario (ad esempio funzioni inline), allora quel codice potrebbe non essere trasformato in una parte del file binario di output.

Troppe intestazioni possono portare a bug del compilatore difficili da tracciare, se definisci qualcosa in due intestazioni e includi entrambe, puoi finire usando la definizione sbagliata. Di conseguenza, è sempre meglio provare a utilizzare il numero minimo di intestazioni necessario.

    
risposta data 04.02.2016 - 14:20
fonte

Leggi altre domande sui tag