Sie müssen wissen, dass x & ((1 << n) - 1)
ist ein Trick Bedeutung x % ((int) pow(2, n))
. Oft ist es schneller (aber es ist besser, diese Art von Optimierungen dem Compiler zu überlassen).
Also in diesem Fall, was das tut, tut es ein Modulo von . Dies verursacht einen Umlauf; wenn page_idx größer als pow(2, MAX_ORDER)
ist, wird es auf 0 zurück Hier entspricht, aber lesbarer Code:
const int MAX_ORDER_N = (int) pow(2, MAX_ORDER);
page_idx = page_to_pfn(page);
/* wraparound */
while (page_idx > MAX_ORDER_N) {
page_idx -= MAX_ORDER_N;
}
Aber warum das Buddy-System und umlaufendem müssen? Und wie könnte dieser Code die korrekte Seitennummer zurückgeben? Ich meine page_to_pfn() habe den richtigen zurückgegeben und der folgende Wrap-Around wird es falsch machen. – tolearn