[英]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.