标签:kernel c-3 memory-management 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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。