Il libro "Efficiente C ++" sarebbe irrilevante ora a causa dei miglioramenti del compilatore? [chiuso]

4

Sto pensando di acquistare questo libro per saperne di più sulla programmazione C ++ per quanto riguarda il codice veloce. Tuttavia, il libro è stato pubblicato nel 1999 e sono preoccupato che la maggior parte di esso potrebbe essere irrilevante ora a causa delle ottimizzazioni eseguite dai compilatori.

Qualcuno potrebbe consigliare?

link

modifica:

Trovato anche questo libro, anche se piuttosto vecchio:

link

    
posta Roger 14.05.2012 - 14:55
fonte

5 risposte

5

Il libro tocca temi come temporaries, constructors / destructors, il sovraccarico di funzioni virtuali, benefici e insidie di inlining, pool di memoria, cache, effetti cache della CPU, registri, ecc.

Molte di queste tecniche sono ancora valide, anche se la lingua e i compilatori offriranno molto più aiuto rispetto al 1999 e l'hardware su cui lo stai eseguendo è diverso.

Aiuta a sapere cosa è cambiato da allora, ma ti consiglio comunque di leggere il libro se non sai da dove iniziare, semplicemente perché non conosco nulla di più recente che tratti specificamente questo tipo di argomenti.

    
risposta data 14.05.2012 - 16:30
fonte
3

Penso che non sia necessariamente irrilevante solo perché è vecchio. Ad esempio, C ++ consente di inserire un'invocazione del costruttore ovunque possa verificarsi un'espressione. Ciò significa che il compilatore non può spostare le chiamate del costruttore per rendere più efficiente il codice di runtime, perché ci sono delle regole su ciò che è garantito che sia successo tra i punti di sequenza in un programma C ++. OK, è solo un esempio e la regola è semplice (l'istanza lazy indica che non è in esecuzione un costruttore finché non è necessario), ma significa che esistono tecniche indipendenti dal compilatore per migliorare l'efficienza del codice.

    
risposta data 14.05.2012 - 15:28
fonte
3

Più rilevante, ci sono semplicemente nuove tecniche e nuove funzionalità linguistiche, soprattutto riferimenti di valore, e le ottimizzazioni del compilatore sono molto più forti di quelle che erano con caratteristiche come l'inlining cross-TU, RVO e NRVO. Vorrei cercare un libro più recente.

    
risposta data 14.05.2012 - 15:34
fonte
0

No, il libro non è affatto irrilevante. È un po 'vecchia scuola in alcuni posti, ma anche molte compagnie di codifica sono così. Inoltre, la maggior parte di ciò che insegna sarà sempre una parte di C ++.

Detto questo, personalmente penso che i libri di Sutter siano migliori. Non coprono lo stesso materiale, quindi, se quello che c'è nei libri di Meyers è nuovo per te ... prendi entrambi.

    
risposta data 14.05.2012 - 17:34
fonte
0

Il compilatore cerca di ottimizzare ciò che può, ma devi ottimizzare ciò che puoi e il libro dovrebbe aiutarti in questo (un po ').

Se stai per scrivere programmi di grandi dimensioni, è molto facile mettere a lentezza, senza volerlo, che il compilatore non potrebbe mai annullare.

Il mio esempio preferito è qui . Consiste in un programma realisticamente ampio che è stato ottimizzato. È stato reso più veloce del 50%. Ma ciò non significava che non potesse essere ulteriormente ottimizzato. Il secondo tentativo ha eliminato una percentuale sana di ciò che era rimasto. Ma quella non era ancora la fine. Questo è stato fatto sei volte e indovina quale sia stato il rapporto di accelerazione generale?

730 volte.

Verso la fine, le ottimizzazioni fatte erano, fuori dal tempo del programma originale, così piccole da essere insignificanti. Ma dopo che una serie di altri problemi sono stati rimossi, i piccoli problemi diventano più grandi, in termini percentuali, quindi valgono la pena rimuoverli. Il rapporto di accelerazione individuale che ottieni con ogni ottimizzazione potrebbe non essere troppo sorprendente, ma si moltiplica insieme come l'interesse composto.

Ecco come puoi davvero ottimizzare il codice. Con tutti i mezzi, usa il libro, ma non limitarti a ciò che dice.

    
risposta data 14.05.2012 - 18:05
fonte

Leggi altre domande sui tag