Afin de rendre une page sale (en activant le bit sale dans l'entrée du tableau des pages), je touche les premiers octets de la page comme ceci:
pageptr[0] = pageptr[0];
Mais en pratique, gcc ignorera l'instruction par élimination du magasin mort. Afin d'empêcher gcc de l'optimiser, je réécris l'instruction comme suit:
volatile int tmp;
tmp = pageptr[0];
pageptr[0] = tmp;
Il semble que le truc fonctionne, mais un peu moche. Je voudrais savoir s'il existe des directives ou une syntaxe qui ont le même effet? Et je ne veux pas utiliser de -O0
drapeau, car cela entraînera également une grande pénalité de performance.
-O0
n'empêchait pas "l'optimisation" du code mort, par exemple, lorsque GCC détecte un code n'a aucun effet, il le supprime simplement. AFAIK c'est une étape avant même -O0
... Mais c'est juste mon expérience