Для того, щоб зробити сторінку брудною (увімкнувши брудний біт у записі таблиці сторінки), я торкаюся перших байтів сторінки таким чином:
pageptr[0] = pageptr[0];
Але на практиці gcc ігнорує заяву шляхом усунення мертвих магазинів. Щоб запобігти оптимізації gcc, я переписую заяву наступним чином:
volatile int tmp;
tmp = pageptr[0];
pageptr[0] = tmp;
Здається, фокус працює, але дещо некрасиво. Мені хотілося б знати, чи є якісь директиви чи синтаксис, які мають такий же ефект? І я не хочу використовувати -O0
прапор, оскільки він також принесе чудове покарання.
-O0
не заважало мертвій коді "оптимізації", наприклад, коли GCC виявляє якийсь код не має ефекту, він просто видаляє його. AFAIK це етап ще до -O0
... Але це тільки мій досвід