Untuk membuat halaman kotor (mengaktifkan bit kotor di entri tabel halaman), saya menyentuh byte pertama halaman seperti ini:
pageptr[0] = pageptr[0];
Namun dalam praktiknya, gcc akan mengabaikan pernyataan tersebut dengan eliminasi penyimpanan mati. Untuk mencegah gcc mengoptimalkannya, saya menulis ulang pernyataan sebagai berikut:
volatile int tmp;
tmp = pageptr[0];
pageptr[0] = tmp;
Tampaknya triknya berhasil, tetapi agak jelek. Saya ingin tahu apakah ada arahan atau sintaksis yang memiliki efek yang sama? Dan saya tidak ingin menggunakan -O0
bendera, karena itu akan membawa penalti untuk performa yang bagus juga.
-O0
tidak mencegah kode mati "optimasi", misalnya, ketika GCC mendeteksi beberapa kode tidak berpengaruh, itu hanya menghapusnya. AFAIK ini adalah tahap bahkan sebelumnya -O0
... Tapi itu hanya pengalaman saya