我try 将指针一次向前移动4096个字节,如下所示:
#include <stdint.h>
#include <stdio.h>
void calculate(void* a)
{
uintptr_t stride = 4096;
uint64_t *buff = (uint64_t*)a;
for (uintptr_t offset = 0; offset < 20000; offset += stride)
{
fprintf(stdout, "%s: stride = 0x%x offset = 0x%x buff = %p offset+buff = %p\n", __func__, stride, offset, buff, offset+buff);
}
}
int main(void)
{
void* address = 0x7f5b588d1000;
calculate(address);
return 0;
}
然而,这是当前的输出:
calculate: stride = 0x1000 offset = 0x0 buff = 0x7f5b588d1000 offset+buff = 0x7f5b588d1000
calculate: stride = 0x1000 offset = 0x1000 buff = 0x7f5b588d1000 offset+buff = 0x7f5b588d9000
如你所见,上面写着:
0x7f5b588d1000 + 0x1000 = 0x7f5b588d9000
为什么这个计算是错误的?结果显然应该是0x7f5b588d2000