gpt4 book ai didi

c - Linux:伙伴系统空闲内存

转载 作者:太空狗 更新时间:2023-10-29 11:10:34 26 4
gpt4 key购买 nike

谁能解释这段代码?

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;
}

关于c - Linux:伙伴系统空闲内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9858986/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com