gpt4 book ai didi

检查两个指针​​是否在同一页上

转载 作者:行者123 更新时间:2023-11-30 20:51:26 25 4
gpt4 key购买 nike

我看到了这个面试问题,想知道我的功能是否正在做它应该做的事情,或者是否有更好的方法来做到这一点。

以下是问题的确切引用:

The operating system typically allocates memory in pages such that the base address of the page are 0, 4K, 8K etc. Given two addresses (pointers), write a function to find if two pointers are on the same page. Here's the function prototype: int AreOnSamePage (void * a, void * b);

这是我的实现。如果它在 4k 和 8k 之间,我让它返回 4。如果在 0 到 4k 之间,则返回 1;如果超过 8k,则返回 -1。我得到的地址正确吗?面试问题措辞含糊。由于地址可能很大,所以使用 long 是否正确?

    int AreOnSamePage(void* a, void* b){
long difference = abs(&a - &b);
printf("%ld %ld\n",(long)&a,(long)&b);
if(difference > 8000)
return -1;
if(difference >= 4000)
return 4;
return 1;
}

最佳答案

ab是指针,所以它们之间的距离是:

ptrdiff_t 差异 = (ptrdiff_t) abs((char *)a - (char *) b)

但你不需要它。两个指针在同一页上,如果

(uintptr_t)a/4096 == ( uintptr_t ) b/4096

否则它们位于不同的页面上。所以:

    int AreOnSamePage(void* a, void* b) {
const size_t page_size = 4096;
if ( (uintptr_t) a / page_size == (uintptr_t) b / page_size)
return 1;
else
return 0;
}

关于检查两个指针​​是否在同一页上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32287378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com