Para ensuciar una página (activando el bit sucio en la entrada de la tabla de páginas), toco los primeros bytes de la página así:
pageptr[0] = pageptr[0];
Pero en la práctica, gcc ignorará la declaración por eliminación de tienda muerta. Para evitar que gcc lo optimice, reescribo la declaración de la siguiente manera:
volatile int tmp;
tmp = pageptr[0];
pageptr[0] = tmp;
Parece que el truco funciona, pero algo feo. Me gustaría saber si hay alguna directiva o sintaxis que tenga el mismo efecto. Y no quiero usar una -O0bandera, ya que también traerá una gran penalización de rendimiento.
-O0no impedía la "optimización" del código muerto, por ejemplo, cuando GCC detecta que algún código no tiene efecto, simplemente lo elimina. AFAIK, esta es una etapa incluso antes -O0... Pero esa es solo mi experiencia