系统相关
首页 > 系统相关> > c-Linux:好友系统可用内存

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