c-Linux:好友系统可用内存
作者:互联网
谁能解释这个代码?
page_idx = page_to_pfn(page) & ((1 << MAX_ORDER) - 1);
page_to_pfn()已经返回了page_idx,那么’&’是什么呢?用于?还是page_to_pfn()返回其他内容?
解决方法:
您需要知道x& (((1< n)-1)是一个技巧,意思是x%((int)pow(2,n)).通常它会更快(但最好将这些优化留给编译器). 因此,在这种情况下,它将通过pow(2,MAX_ORDER)进行模运算.这会导致绕回;如果page_idx大于pow(2,MAX_ORDER),它将返回0.这是等效的,但可读性更高的代码:
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;
}
标签:kernel,c-3,memory-management,linux 来源: https://codeday.me/bug/20191201/2081756.html