2013-07-27 27 views
5

Czy mogę wiedzieć, gdzie zmienna volatile jest zapisywana w pamięci?Gdzie przechowywane są zmienne ulotne?

  1. Jeśli deklaruję globalnie, oznacza miejsce, w którym jest przechowywane w pamięci?

    volatile int a =10; 
    int main() 
    { 
        printf("Global A value=%d",a); 
        return 0; 
    } 
    
  2. Jeśli deklaruję lokalnie w funkcji oznacza, gdzie jest przechowywane w pamięci?

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

Czy przechowywane w segmencie stosu/RAM/data?

Proszę wyjaśnić moje wątpliwości.

+0

Jakiego rodzaju odpowiedzi szukasz? Co masz na myśli przez "gdzie to jest przechowywane w pamięci?" Czy chcesz uzyskać jego adres? Czy próbujesz zrozumieć, z jakiej puli pamięci pochodzą te zmienne, zgodnie z definicjami standardu dla takich pul? –

+1

@NicolBolas: Sądzę, że część pytania brzmi "czy kwalifikowanie zmiennej za pomocą' volatile' zmienia lokalizację pamięci, w której kompilator umieszcza zmienną ', której odpowiedź brzmi "nie". –

+0

Nie widzę, jak to jest duplikat drugiego. Drugi dotyczy "tego, co jest" lotne ", to jest" jaki wynik ma w odniesieniu do adresów pamięci ". – glglgl

Odpowiedz

13

po prostu informuje kompilatora, że ​​nie może buforować wartości zmiennej w rejestrze - nie zmienia miejsca, w którym zostanie przydzielona.

+0

czasami pomaga to również w zapobieganiu niektórym wadom procesu optymalizacji kompilatora, takim jak eliminacja 'var' z całego programu. Zasadniczo kompilator zachowuje "var" pod uwagę, nawet jeśli nie jest używany w całym programie i dlatego go nie usuwa. – user2485710

11

Dodanie do deklaracji zmiennej kwalifikatora volatile nie zmienia jego klasy przechowywania.

W pierwszym przykładzie zmienna ma pamięć statyczną, a w drugim przykładzie - pamięć automatyczną; Dzieje się tak nawet po usunięciu kwalifikatora volatile.

+0

Cześć wszystkim, dziękuję za odpowiedź. – SenthilKumar

+0

Witam wszystkich, W moim pierwszym przykładzie rozumiem, że globalna inicjowana zmienna (bez lotności) jest zapisywana w "Inicjowanym segmencie danych" i moim drugim przykładzie, ponieważ jest zmienną lokalną (bez lotności), zostaje zapisana w stosie. dodaj zmienne słowo kluczowe oznacza, że ​​zmienne miejsce zostanie zmienione? – SenthilKumar

Powiązane problemy