2013-04-10 8 views
5

Piszę program dla ARM ze środowiskiem Linux. jej nie program niski poziom, powiedzmy poziom aplikacjaUlotne w C i Cpp w środowisku linux

Czy możesz mi wyjaśnić, jaka jest różnica między,

int iData; 

vs

volatile int iData; 

Czy ma konkretny wpływ sprzętową?

+2

nie wspominając o [nawet bardziej podstawowe podejścia] (http://bit.ly/11RH6wk). – WhozCraig

Odpowiedz

-1

lotny w C powstał w celu automatycznego buforowania wartości zmiennej. Poinformuje urządzenie, aby nie buforowało wartości tej zmiennej. Więc za każdym razem, gdy go napotka, przyjmie wartość danej zmiennej lotnej z pamięci głównej. Ten mechanizm jest używany, ponieważ w dowolnym momencie wartość może być modyfikowana przez system operacyjny lub dowolne przerwanie. Używanie lotnych pomoże nam zawsze uzyskać dostęp do wartości za każdym razem.

Przeczytaj stronę Wiki i this więcej wyjaśnień

+0

Twoje ans wygląda świetnie. dziękuję Jaguar .. Mam inną wątpliwość, czy potrzebujemy lotnych w przypadku maszyny bez pamięci podręcznej? –

+0

Potrzebujesz 'volatile' nawet bez pamięci podręcznej pamięci, gdy masz więcej niż jeden rejestr w swoim procesorze. Ponieważ słowo kluczowe 'volatile' mówi również do kompilatora: nie przechowuj tej wartości w rejestrze, zawsze pobieraj ją z pamięci ... Na przykład, procedury obsługi sygnałów często ustawiają flagę' volatile sigatomic_t' ... –

+2

Przepraszam, ale to źle, niestabilnie nie przeszkadza MASZYNIE w przechowywaniu w pamięci cokolwiek. Zapobiega on przechowywaniu zmiennej w rejestrze. Mówiąc ogólnie, wyłącza CSE i kilka innych optymalizacji dla tej zmiennej. –

Powiązane problemy