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