如何回溯指针?

coo*_*uff 3 c c++ memory pointers backtracking

假设我有2个指针指向相同的内存位置.如果我知道它是什么地址,我怎样才能找出指向该位置的指针?

int x=5;
int* p1=&x;
int* p2=&x;
Run Code Online (Sandbox Code Playgroud)

我如何获得p1和p2的地址?是否有可能在C/C++中做到这一点?如果没有那么是否可以搜索所有指针并查看哪些指针具有&x的值?

hug*_*omg 6

不,它不可能在C或C++中"回溯"指针(一个好的经验法则是,如果一个功能具有很大的隐藏性能成本,那么它在C或C++中不存在)

至于第二种方法(通过内存寻找指针),这正是像Boehm垃圾收集器这样的工具.但是,这个过程不仅不合适而且不可移植,但它也可能导致"误报",因为你无法判断内存中的字节模式是真正的指针还是其他类似普通整数或字符串的一部分.


无论如何,你应该问问自己,你需要解决什么是真正的问题,而不是试图自己破解垃圾收集器.根据你想要做的事情,有许多方法可以用C++(RAII,智能指针等)来处理它

  • "如果某个功能具有很大的隐藏性能成本,那么它在C或C++中就不存在" - 告诉<iostream>! (6认同)