In order to make a page dirty (switching on the dirty bit in the page table entry), I touch the first bytes of the page like this:
pageptr[0] = pageptr[0];
But in practice gcc will ignore the statement by dead store elimination. In order to prevent gcc optimizing it, I re-write the statement as follows:
volatile int tmp;
tmp = pageptr[0];
pageptr[0] = tmp;
It seems the trick works, but somewhat ugly. I would like to know is there any directives or syntax which has the same effect? And I don't want to use a -O0
flag, since it will bring great performance penalty as well.
Question&Answers:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…