2013-07-27 35 views
5

Kann ich wissen, wo die volatile Variable im Speicher gespeichert wird?Wo sind flüchtige Variablen gespeichert?

  1. Wenn ich global deklariere bedeutet, wo wird es im Speicher gespeichert?

    volatile int a =10; 
    int main() 
    { 
        printf("Global A value=%d",a); 
        return 0; 
    } 
    
  2. Wenn ich lokal innerhalb der Funktion deklarieren bedeutet, wo kommt es in dem Speicher gespeichert werden?

    int main() 
    { 
        volatile int a =10; 
        printf("Local A value=%d",a); 
        return 0; 
    } 
    

Ist es in Stapeln/RAM/Datensegment gespeichert werden?

Bitte klären Sie meine Zweifel.

+0

Welche Art von Antwort suchen Sie? Was meinst du mit "wo wird es gespeichert?" Suchst du nach seiner Adresse? Versuchen Sie zu verstehen, aus welchem ​​Speicherpool solche Variablen in Übereinstimmung mit den Definitionen des Standards für solche Pools stammen? –

+1

@NicolBolas: Ich denke, dass ein Teil der Frage ist "qualifiziert eine Variable mit" volatile "ändern Sie den Speicherort, wo der Compiler die Variable platziert", auf die die Antwort ist "Nein". –

+0

Ich kann nicht sehen, wie das ein Duplikat des anderen ist. Der andere handelt von "was ist flüchtig", dieser ist "welches Ergebnis hat es in Bezug auf Speicheradressen". – glglgl

Antwort

13

volatile teilt dem Compiler mit, dass er den Wert der Variablen in einem Register nicht zwischenspeichern kann - er ändert nicht, wo er zugewiesen wird.

+0

manchmal hilft es auch einige Nachteile Ihres Compiler-Optimierungsprozess wie die Elision der 'var' aus dem gesamten Programm zu verhindern. Grundsätzlich berücksichtigt der Compiler die 'var', auch wenn sie nicht im gesamten Programm verwendet wird und sie daher nicht gelöscht wird. – user2485710

11

Das Hinzufügen eines volatile Qualifikationsmerkmals zu einer Variablendeklaration ändert nicht seine Speicherklasse.

In Ihrem ersten Beispiel hat die Variable statischen Speicher und im zweiten Beispiel hat sie automatischen Speicher; Dies ist auch dann der Fall, wenn Sie das Qualifikationsmerkmal volatile entfernen.

+0

Hallo zusammen, Vielen Dank für Ihre Antwort. – SenthilKumar

+0

Hi All, In meinem ersten Beispiel verstehe ich, dass globale initialisierte Variable (ohne volatile) in "Initialized data segment" gespeichert wird und mein 2. Beispiel, da es lokale Variable (ohne volatile) wird es in stack.so gespeichert, wenn i add volatile keyword bedeutet, dass die Variable Ort geändert werden? – SenthilKumar

Verwandte Themen