Aby zabrudzić stronę (włączając brudny bit we wpisie tablicy stron), dotykam pierwszych bajtów strony w ten sposób:
pageptr[0] = pageptr[0];
Ale w praktyce gcc zignoruje stwierdzenie przez eliminację martwego magazynu. Aby zapobiec optymalizacji przez gcc, ponownie piszę instrukcję w następujący sposób:
volatile int tmp;
tmp = pageptr[0];
pageptr[0] = tmp;
Wygląda na to, że sztuczka działa, ale jest trochę brzydka. Chciałbym wiedzieć, czy są jakieś dyrektywy lub składnia, które mają taki sam skutek? I nie chcę używać -O0
flagi, ponieważ przyniesie to również duży spadek wydajności.
-O0
nie zapobiegało „optymalizacji” martwego kodu, np. Gdy GCC wykryje jakiś kod nie daje efektu, po prostu go usuwa. AFAIK, to jest etap jeszcze wcześniej -O0
... Ale to tylko moje doświadczenie