gpt4 book ai didi

c++ - 如何判断两个指针是否指向同一 block 内存

转载 作者:行者123 更新时间:2023-11-30 18:17:35 26 4
gpt4 key购买 nike

我正在尝试解决以下问题:

/*
* Return 1 if ptr1 and ptr2 are within the *same* 64-byte aligned
* block (or word) of memory. Return zero otherwise.
*
* Operators / and % and loops are NOT allowed.
*/
/*

我有以下代码:

int withinSameBlock(int * ptr1, int * ptr2) {
// TODO
int temp = (1 << 31) >> 25;
int a = ptr1;
int b = ptr2;
return (a & temp) == (b & temp);
}

我被告知这可以正确解决问题,但我不确定它是如何工作的。具体来说, int temp = (1 << 31) >> 25; 行如何能帮忙解决问题吗?

最佳答案

行:

int temp = (1 << 31) >> 25;

要么不正确,要么触发未定义的行为(取决于字长)。碰巧你的机器和编译器上的未定义行为做了正确的事情并且恰好给出了正确的答案。为了避免未定义的行为并使代码更清晰,您应该使用:

int withinSameBlock(int * ptr1, int * ptr2) {
uintptr_t temp = ~(uintptr_t)63;
uintptr_t a = (uintptr_t)ptr1;
uintptr_t b = (uintptr_t)ptr2;
return (a & temp) == (b & temp);
}

关于c++ - 如何判断两个指针是否指向同一 block 内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24836653/

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