繁体   English   中英

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

[英]Checking whether two pointers are in the same block of memory

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

谢谢

弗洛里斯基本上是给你这个主意的。 这是我对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;

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM