Para tornar uma página suja (ativando a parte suja na entrada da tabela de páginas), toco os primeiros bytes da página assim:
pageptr[0] = pageptr[0];
Mas, na prática, o gcc ignorará a instrução eliminando o armazenamento morto. Para evitar que o gcc o otimize, reescrevo a instrução da seguinte maneira:
volatile int tmp;
tmp = pageptr[0];
pageptr[0] = tmp;
Parece que o truque funciona, mas um tanto feio. Gostaria de saber se existe alguma diretiva ou sintaxe que tenha o mesmo efeito? E não quero usar -O0
flag, pois trará grande penalidade de desempenho também.
-O0
não impedia a "otimização" de código morto, por exemplo, quando o GCC detecta que algum código não tem efeito, ele simplesmente o remove. AFAIK esta é uma fase antes -O0
... Mas essa é apenas a minha experiência