Bir sayfayı kirletmek için (sayfa tablosu girişindeki kirli biti açmak), sayfanın ilk baytlarına şu şekilde dokunuyorum:
pageptr[0] = pageptr[0];
Ancak pratikte gcc, ölü depo eleme yoluyla bu ifadeyi yok sayacaktır. Gcc'nin onu optimize etmesini önlemek için ifadeyi aşağıdaki gibi yeniden yazıyorum:
volatile int tmp;
tmp = pageptr[0];
pageptr[0] = tmp;
İşe yarıyor gibi görünüyor, ama biraz çirkin. Aynı etkiye sahip herhangi bir yönerge veya sözdizimi var mı bilmek isterim? Ayrıca -O0büyük bir performans cezası getireceği için bayrak kullanmak istemiyorum .
-O0ölü kod "optimizasyonu" nu engellemedi, örneğin, GCC bazı kodların hiçbir etkisi olmadığını tespit ettiğinde, basitçe kaldırır. AFAIK bu daha önce bir aşamadır -O0... Ama bu sadece benim deneyimim