0

这是一个家庭作业问题,我对如何处理感到困惑。还有一些限制是我不能使用 /、% 或任何循环。给定一个方法,它接受两个 int 类型的指针。取这两个指针,我需要找出它们是在同一个内存块中还是在不同的内存块中。如果情况一,如果它们在同一个块中,我返回 1,否则返回 0。所以我的想法是,如果两个指针在同一个内存块中,那一定意味着它们指向同一个整数?我不确定这是否正确,任何正确方向的提示将不胜感激。

谢谢

4

2 回答 2

2

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));
于 2013-07-02T19:37:04.543 回答
-2

假设您知道内存块有多大(我假设为 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;

}
于 2013-07-02T19:34:01.403 回答