检查两个指针​​是否在同一个内存块中

时间:2013-07-02 19:16:52

标签: c pointers

这是一个家庭作业问题,我对如何接近感到困惑。还有限制,我不能使用/,%或任何循环。给定一个方法,它接受两个int类型的指针。拿这两个指针我需要找到它们是在同一块内存中还是在不同的内存块中。如果情况一,我返回1,因为他们在同一个块中,否则为0。所以我的想法是,如果两个指针在同一个内存块中,那么它们必须意味着它们指向同一个整数?我不确定这是否正确,任何正确方向的提示都会受到高度赞赏。

谢谢

2 个答案:

答案 0 :(得分: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));

答案 1 :(得分:-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;

}