2013-04-10 4 views
5

Ich schreibe Programm für ARM mit Linux-Umgebung. seine kein Low Level-Programm, sagen App-EbeneFlüchtig in C und Cpp unter Linux-Umgebung

Können Sie mir erklären, was ist der Unterschied zwischen,

int iData; 

vs

volatile int iData; 

Gibt es Hardware-spezifische Auswirkungen haben?

+2

keinen [noch grundsätzlichen Ansatz] (http://bit.ly/11RH6wk) zu erwähnen. – WhozCraig

Antwort

-1

flüchtig in C entstand zu dem Zweck, die Werte der Variablen nicht automatisch zwischenzuspeichern. Es teilt der Maschine mit, den Wert dieser Variablen nicht zu cachen. Es wird also den Wert der gegebenen flüchtigen Variable jedes Mal aus dem Hauptspeicher nehmen, wenn sie darauf trifft. Dieser Mechanismus wird verwendet, da der Wert jederzeit vom Betriebssystem oder einem Interrupt geändert werden kann. Volatilität hilft uns, jedes Mal aufs Neue auf den Wert zuzugreifen.

Lesen Sie die Wiki und this Seite für weitere Erklärung

+0

Ihr ans sieht gut aus. Danke Jaguar. Ich habe noch einen Zweifel, brauchen wir volatile im Falle einer nicht-Cache-Maschine? –

+0

Sie benötigen 'volatile' auch ohne Speichercache, wenn Sie mehr als ein Register in Ihrem Prozessor haben. Weil das Schlüsselwort 'volatile' auch dem Compiler sagt: behalte diesen Wert nicht in einem Register, lade ihn immer aus dem Speicher ... Zum Beispiel setzen Signal-Handler oft ein 'volatile sigatomic_t'-Flag ... –

+2

Entschuldigung, aber das ist falsch, volatil verhindert nicht, dass die MASCHINE irgendetwas zwischenspeichert. Es verhindert, dass der COMPILER eine Variable in einem Register behält. Grob gesagt, deaktiviert es CSE und einige andere Optimierungen für diese Variable. –