Чтобы сделать страницу грязной (включение грязного бита в записи таблицы страниц), я прикасаюсь к первым байтам страницы следующим образом:
pageptr[0] = pageptr[0];
Но на практике gcc будет игнорировать утверждение путем уничтожения мертвого хранилища. Чтобы предотвратить gcc-оптимизацию, я перезаписываю оператор следующим образом:
volatile int tmp;
tmp = pageptr[0];
pageptr[0] = tmp;
Кажется, трюк работает, но несколько уродливо. Я хотел бы знать, есть ли какие-либо директивы или синтаксис, которые имеют такой же эффект? И я не хочу использовать флаг -O0
, так как он также принесет большую производительность.