Per sporcare una pagina (accendendo il dirty bit nella voce della tabella delle pagine), tocco i primi byte della pagina in questo modo:
pageptr[0] = pageptr[0];
Ma in pratica gcc ignorerà l'istruzione eliminando il dead store. Per evitare che gcc lo ottimizzi, riscrivo l'istruzione come segue:
volatile int tmp;
tmp = pageptr[0];
pageptr[0] = tmp;
Sembra che il trucco funzioni, ma un po 'brutto. Vorrei sapere se esistono direttive o sintassi che hanno lo stesso effetto? E non voglio usare una -O0
bandiera, dal momento che porterà anche grandi penalità alle prestazioni.
-O0
non ha impedito l '"ottimizzazione" del codice morto, ad esempio, quando GCC rileva che del codice non ha effetto, lo rimuove semplicemente. Per quanto ne so, questa è una fase anche prima -O0
... Ma questa è solo la mia esperienza