2012-12-18 14 views
6

sto cercando di utilizzare __atomic_load_n dalla pagina gccatomic builtins, la compilazione conUtilizzo di buildin atomici gcc?

gcc -Wall -march=i686 -std=gnu99 ll.c -o ll 

ma mi dice che non può

warning: implicit declaration of function ‘__atomic_load_n’ 

ho pensato che sarebbe stato sufficiente per fornire gcc con la arch e i flag march (e si sono accertati impostando il flag std=gnu99), ma senza risultati. Infatti, anche se provo per i comuni macro __GCC_VERSION__ o __GNUC__ non sembrano avere valori ... ma ho una bella installazione di vaniglia gcc, quella che arriva in Unbuntu.

So che sto facendo qualcosa di sciocco, ma non riesco a capire cosa. Ho gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3

Il codice si presenta così: è una funzione che non viene mai chiamata (ancora), quindi il problema è in fase di compilazione.

type* func(type* p) { 
    type* q = __atomic_load_n (p, __ATOMIC_SEQ_CST); 
} 
+0

Puoi mostrarci il codice che ti sta dando l'errore? – NPE

+0

@NPE: certo, le domande sono state aggiornate. –

+1

Posso compilare il tuo codice senza problemi (gcc 4.7.2) una volta digitato 'type' in' int'. Se si sospetta un problema con l'installazione del compilatore, provare a creare un progetto non trival ma pulito con esso per vedere cosa succede? – NPE

risposta

13

Fino GCC 4.6.3, compilatore built-in per operazioni atomiche erano un'estensione compilatore puro, e in GCC furono raggruppati nella __sync_* famiglia di funzioni.

A partire dalla versione 4.7.0, i nuovi standard C++ 11 e C11 sono stati finalizzati e GCC ha aggiornato i propri componenti atomici per riflettere meglio il nuovo modello di memoria di queste due nuove revisioni del linguaggio. Le nuove funzioni sono raggruppate nella famiglia __atomic_*.

Tuttavia, il built-in di anziani sono still available, e il documentation dice questo:

È sempre sicuro per sostituire una chiamata __sync con una __atomic chiamata utilizzando il modello __ATOMIC_SEQ_CST memoria.

+0

Mentre '__ATOMIC_SEQ_CST' è sempre valido, potrebbe darti risultati piuttosto subottimali, di coppia in base al modello di memoria della tua CPU. –

+0

Grazie, ben risposto! –

Problemi correlati