Svantaggio del missaggio del codice C ++ con C a fini di prestazioni

3

Spesso puoi vedere risposte come "Evita di usare librerie C nel tuo codice C ++" o "Questo può essere riscritto usando STD / Boost in puro C ++".

Capisco che C ++ produca un codice più gestibile e abbia molti vantaggi, ma in realtà è un problema usare le librerie C quando le prestazioni sono prioritarie? Intendo scrivere in ciò che a volte viene chiamato C-with-classes.

Ho sviluppato un parser di file di testo con entrambe le versioni C e C ++ e il C uno è stato notevolmente più veloce.

Quello che mi piacerebbe sapere è se l'uso delle librerie C in C ++ ha degli svantaggi nascosti oltre a quelli ovvi come rendere il codice meno gestibile.

    
posta user39517 03.01.2014 - 01:41
fonte

2 risposte

8

is it actually bad using C libraries when performance is a priority?

È se non hai effettivamente bisogno della performance boost che la libreria C fornirebbe, o la libreria C produce solo un aumento minimo delle prestazioni, perché stai tralasciando troppi dei benefici che ottieni usando STD / Boost.

Se:

  1. Profili il tuo codice usando STD / Boost e
  2. Profili il tuo codice usando le librerie C e
  3. C'è un miglioramento significativo delle prestazioni con le librerie C e
  4. In effetti hai bisogno del miglioramento delle prestazioni; Ad esempio, l'uso delle librerie C corregge un problema di prestazioni effettive

Quindi direi che la libreria C è una scelta migliore. Ma circa il 99 percento delle volte, non sarà la scelta migliore, perché l'aumento delle prestazioni (se ce n'è uno) sarà così piccolo che non ne varrà la pena.

Ulteriori letture
Uso / mixaggio C nel codice C ++? su StackOverflow

    
risposta data 03.01.2014 - 02:08
fonte
4

I programmatori C ++ sembrano avere il timore di non utilizzare abbastanza funzionalità del linguaggio in ogni momento. 'C with classes' può essere una soluzione perfettamente accettabile se risolve il tuo problema, e la scrittura di librerie in C ti dà il vantaggio di poterle usare anche con altre lingue.

Dovrai assicurarti che tutte le risorse allocate dalla tua libreria abbiano una proprietà esplicita o che si verifichino perdite.

Detto questo sono sorpreso che il tuo codice C abbia sovraperformato il tuo codice C ++, questo indica un problema con il tuo codice C ++ (probabilmente stai usando std :: string dappertutto)

    
risposta data 03.01.2014 - 03:19
fonte

Leggi altre domande sui tag