如何在 C++ 中有意保留和收获悬空指针
How to intentionally preserve and harvest a dangling pointer in C++
我正在编写一个 LLVM 插件。在其中,我创建了一个 全局指针数组 来获取程序中不同函数流中的数据。当指针采用函数范围内的地址时,逻辑上假设,一旦超出其范围,内存内容将有被覆盖的风险,因为 OS 认为合适。
我想知道有没有办法让指针的内容不可变(除非我发现自己需要改变它)通过所有范围,当然,在程序内部。
我认为像 volatile
这样的标志可以解决问题,但与非易失性指令相比,这似乎只是保留其顺序位置。
您很可能需要复制数据。
您实际上可以将内存标记为不可写,这将不允许任何人对其进行写入。但是,如果指针在堆栈上或已被释放,这可能会产生不良后果(即段错误和许多错误)。此外,它必须按页完成,例如大块。
记住,如果我释放了一个指针,它指向的数据以后可以被另一个函数重用。即使我 "promise" 不修改指针指向的数据,一旦它被释放......所有的赌注都关闭了。其他人可能会分配相同的内存。
如果释放后需要保留数据/超出范围,则必须复制它。
我正在编写一个 LLVM 插件。在其中,我创建了一个 全局指针数组 来获取程序中不同函数流中的数据。当指针采用函数范围内的地址时,逻辑上假设,一旦超出其范围,内存内容将有被覆盖的风险,因为 OS 认为合适。
我想知道有没有办法让指针的内容不可变(除非我发现自己需要改变它)通过所有范围,当然,在程序内部。
我认为像 volatile
这样的标志可以解决问题,但与非易失性指令相比,这似乎只是保留其顺序位置。
您很可能需要复制数据。
您实际上可以将内存标记为不可写,这将不允许任何人对其进行写入。但是,如果指针在堆栈上或已被释放,这可能会产生不良后果(即段错误和许多错误)。此外,它必须按页完成,例如大块。
记住,如果我释放了一个指针,它指向的数据以后可以被另一个函数重用。即使我 "promise" 不修改指针指向的数据,一旦它被释放......所有的赌注都关闭了。其他人可能会分配相同的内存。
如果释放后需要保留数据/超出范围,则必须复制它。