GCC ottimizza il codice per rimuovere le operazioni di lettura delle variabili inutili? [chiuso]

-1

Sto usando GCC su ununtu 14.04. Il mio programma è scritto in c ++ e in un caso ho bisogno di controllare la quantità di tempo necessario al programma per leggere un grande array intero. qual è il modo migliore per farlo senza causare l'ottimizzazione non necessaria del compilatore?

    
posta Hele 14.10.2014 - 20:08
fonte

2 risposte

2

Ottimizza le letture se vede che il risultato non è utilizzato, ancor più se il compilatore vede che l'intero corpo del loop è vuoto, l'intero ciclo potrebbe essere ottimizzato.

Sarà necessario eseguire un'altra operazione con il risultato per garantire che le letture rimangano. Xorizzare gli interi insieme è un semplice esempio, chiamando una funzione con esso come parametro che il compilatore non può ottimizzare (perché potrebbe avere effetti collaterali).

Detto questo, solo la semplice lettura dell'array non è una metrica utile di per sé.

    
risposta data 14.10.2014 - 20:21
fonte
2

A meno che non abbia frainteso i tuoi requisiti, la parola chiave "volatile" potrebbe essere sufficiente per il tuo desiderio di impedire l'ottimizzazione indesiderata. Ho provato quanto segue usando GCC versione 4.6.3 e verificato che la lettura degli elementi dell'array in x non è mai stata ottimizzata (testata con i livelli di ottimizzazione -O0, -O1, -O2 e -O3).

#include <stdio.h>

int array[1024];

int main (void) {
    volatile int  x;
    int           i;

    for (i = 0; i < 1024; i++) {
        x = array[i];
    }

    return 0;
}

Spero che questo aiuti.

    
risposta data 14.10.2014 - 22:03
fonte

Leggi altre domande sui tag