2012-12-19 7 views
5

Według tego defect report C++ 03 standard nie gwarantuje, że w poniższym kodzie:Jaki jest zgodny z C++ 03 sposób pobierania wartości ze zmiennej lotnej?

volatile int x; 
void f() { 
    x; 
} 

zmienna jest odczytywana z.

Następnie, jak napisać kod, który właśnie odczytał zmienną wartość lotną i odrzuca wynik (czytać ze względu na odczyt)?

+1

z ciekawości, dlaczego chcesz to zrobić? –

+3

@AndreasBrinck Nie wiem, dlaczego OP chciałby to konkretnie, ale jest dość powszechny w programowaniu wbudowanym, gdzie możesz chcieć odczytać z rejestru zapisanego w pamięci, a odczyt może spowodować pewne efekty uboczne. –

+0

@Andreas Brinck: Jest to konieczne, aby wymusić na systemie operacyjnym faktyczne przydzielenie strony pamięci - alokacja jest opóźniona do pierwszego dostępu. – sharptooth

Odpowiedz

5

int i = x; powinien działać. Ten kod bezwzględnie wymaga odczytywania zmiennej lotnej, a optymalizator nie może zoptymalizować odczytu. Ponieważ jednak zmienna i nie jest używana, optymalizator może uniknąć dodatkowej pracy związanej z zapamiętywaniem wartości odczytu.

Można też trzeba coś takiego, aby uniknąć ostrzeżenia kompilatora: (void)i;

Powiązane problemy