如何在C++中有意地保留和获取悬空指针

How to intentionally preserve and harvest a dangling pointer in C++

本文关键字:保留 获取 空指针 C++      更新时间:2023-10-16

我正在编写一个LLVM插件。在它中,我创建了一个全局指针数组,这些指针沿着程序中不同函数的流获取数据。当指针取函数作用域中的地址时,可以合理地假设,一旦超出其作用域,内存的内容就有可能在操作系统认为合适的时候被覆盖。

我想知道是否有一种方法可以通过程序内部的所有范围使指针的内容保持不变(除非我发现自己需要更改它)

我原以为volatile这样的标志就可以了,但与非易失性指令相比,这一切似乎都是为了保持其顺序位置。

很可能需要复制数据。

实际上,您可以将内存标记为不可写入,这将不允许任何人向其写入。但是,如果指针在堆栈上或已被释放,这可能会产生不希望的后果(即segfault和许多错误)。此外,必须逐页执行,例如,以大块执行。

记住,如果我释放了一个指针,它所指向的数据稍后可以被另一个函数重用。即使我"承诺"不修改指针指向的数据,一旦它被释放。。。所有的赌注都落空了。其他人可能会分配相同的内存。

如果您需要在free/超出范围后保留数据,则必须复制它。