gpt4 book ai didi

c++ - pAddress & ~(PAGE_SIZE - 1) 获取页面基地址的技巧是什么

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:04:40 26 4
gpt4 key购买 nike

以下函数用于获取页面内部地址的页面基址:

void* GetPageAddress(void* pAddress)
{
return (void*)((ULONG_PTR)pAddress & ~(PAGE_SIZE - 1));
}

但我不太明白,它在这里玩的是什么把戏?

结论:
就个人而言,我认为 Amardeep 的解释加上 Alex B 的例子是最好的答案。由于 Alex B 的回答已经被投票通过,我想接受 Amardeep 的回答作为官方回答来强调它!谢谢大家。

最佳答案

该函数清除给定地址的低位,从而产生其页面的地址。

例如,如果 PAGE_SIZE 是 4096,那么在 32 位二进制中:

   PAGE_SIZE      = 00000000000000000001000000000000b
PAGE_SIZE - 1 = 00000000000000000000111111111111b
~(PAGE_SIZE - 1) = 11111111111111111111000000000000b

如果您按位并使用 32 位地址,它会将低位变为零,将地址四舍五入为最接近的 4096 字节页面地址。

 ~(PAGE_SIZE - 1)             = 11111111111111111111000000000000b
pAddress = 11010010100101110110110100100100b
~(PAGE_SIZE - 1) & pAddress = 11010010100101110110000000000000b

因此,在十进制中,原始地址为 3533139236,页面地址(去除低位的地址)为 3533135872 = 862582 x 4096,是 的倍数4096

关于c++ - pAddress & ~(PAGE_SIZE - 1) 获取页面基地址的技巧是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3023909/

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