2015-06-02 28 views
8

Sto usando C++ 98. In che misura è possibile riordinare le chiamate di funzione? Non sto usando nessuno stato globale, solo stato di oggetti locali alla funzione.Le chiamate di funzione possono essere riordinate

Il mio caso particolare, è:

{ 
    RaiiType T; 
    Object1.FunctionCall(); 
    Object2.FunctionCall(); 
} 

Dove Object1 e Object2 sono dichiarati nel prossimo ambito up. Il costruttore per T può essere riordinato dopo una chiamata di funzione, supponendo che possa essere banalmente provato (almeno per un umano) che non ci siano dipendenze tra la costruzione e le chiamate di funzione?


Nel mio caso particolare, l'oggetto RAII viene utilizzato per cronometrare l'esecuzione delle chiamate di funzione.

+0

Dipende da "nessuna dipendenza". Se si intende che la differenza non può essere osservata, allora sì, il compilatore (e anche la CPU stessa) è libero di riordinare le operazioni. –

+1

Nessun riordino che modifica il comportamento osservato. Ma il compilatore è autorizzato a fare qualsiasi cosa sotto la "regola come se", se non puoi dire la differenza. – sp2danny

+0

uno di voi dovrebbe postare questo come risposta ("come se la regola" preferibilmente) – Creris

risposta

6

Fintanto che un programma conforme agli standard non è in grado di rilevare la differenza nel suo observable behavior, il compilatore (così come altri componenti del sistema) può liberamente riordinare le istruzioni e le operazioni come preferisce.

+0

in altre parole, sotto "come se la regola" (potrebbe essere stato incluso, solo per renderlo un po 'più completo, ma è la tua decisione) – Creris

+0

È una chiamata a ' clock() '(o meccanismi da' ') considerato" comportamento osservabile "secondo le specifiche? Vedi l'aggiornamento alla domanda. – Nemo

+0

@Nemo Non può essere. Se lo fosse, nessuna ottimizzazione sarebbe legale perché tutte le ottimizzazioni possono cambiare il tempo impiegato per l'esecuzione. Non è possibile "sintetizzare" garanzie, e chiaramente questo non può essere una garanzia che si ha. –

Problemi correlati