这是一个家庭作业问题,我对如何处理感到困惑。还有一些限制是我不能使用 /、% 或任何循环。给定一个方法,它接受两个 int 类型的指针。取这两个指针,我需要找出它们是在同一个内存块中还是在不同的内存块中。如果情况一,如果它们在同一个块中,我返回 1,否则返回 0。所以我的想法是,如果两个指针在同一个内存块中,那一定意味着它们指向同一个整数?我不确定这是否正确,任何正确方向的提示将不胜感激。
谢谢
Floris 基本上给了你这个想法;这是我对 POSIX 的实际实现:
uintptr_t pagesz = getpagesize();
uintptr_t addr_one = (uintptr_t)ptr1;
uintptr_t addr_two = (uintptr_t)ptr2;
bool in_same_page = (addr_one & ~(pagesz - 1)) == (addr_two & ~(pagesz - 1));
假设您知道内存块有多大(我假设为 1k (2^10)),您可以从较大的地址中减去较小的地址,看看差异是否小于块大小 -1。
int same_block(int x, int y){
int difference;
if(x > y){
difference = x - y;
} else {
difference = y - x;
}
if(difference < 1024){
return 1;
}
return 0;
}