簡體   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