作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
以下函数用于获取页面内部地址的页面基址:
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/
目前我有几个配置了以下目录的catalina bases, conf logs server webapps work bin、lib 和common 目录都还在$CATALINA_HOME 中。 我
我是一名优秀的程序员,十分优秀!