ในการทำให้หน้าสกปรก (การเปิดบิตสกปรกในรายการตารางหน้า) ฉันแตะไบต์แรกของหน้าดังนี้:
pageptr[0] = pageptr[0];
แต่ในทางปฏิบัติ gcc จะเพิกเฉยต่อคำสั่งโดยการกำจัดร้านค้าที่ตายแล้ว เพื่อป้องกันไม่ให้ gcc ปรับให้เหมาะสมฉันเขียนคำสั่งใหม่ดังนี้:
volatile int tmp;
tmp = pageptr[0];
pageptr[0] = tmp;
ดูเหมือนว่าเคล็ดลับจะใช้งานได้ แต่ค่อนข้างน่าเกลียด ฉันต้องการทราบว่ามีคำสั่งหรือไวยากรณ์ใดที่มีผลเหมือนกันหรือไม่? และฉันไม่ต้องการใช้-O0
ธงเพราะมันจะนำมาซึ่งโทษประสิทธิภาพที่ดีเช่นกัน