如何在C++中有意地保留和获取悬空指针
How to intentionally preserve and harvest a dangling pointer in C++
我正在编写一个LLVM插件。在它中,我创建了一个全局指针数组,这些指针沿着程序中不同函数的流获取数据。当指针取函数作用域中的地址时,可以合理地假设,一旦超出其作用域,内存的内容就有可能在操作系统认为合适的时候被覆盖。
我想知道是否有一种方法可以通过程序内部的所有范围使指针的内容保持不变(除非我发现自己需要更改它)。
我原以为volatile
这样的标志就可以了,但与非易失性指令相比,这一切似乎都是为了保持其顺序位置。
很可能需要复制数据。
实际上,您可以将内存标记为不可写入,这将不允许任何人向其写入。但是,如果指针在堆栈上或已被释放,这可能会产生不希望的后果(即segfault和许多错误)。此外,必须逐页执行,例如,以大块执行。
记住,如果我释放了一个指针,它所指向的数据稍后可以被另一个函数重用。即使我"承诺"不修改指针指向的数据,一旦它被释放。。。所有的赌注都落空了。其他人可能会分配相同的内存。
如果您需要在free/超出范围后保留数据,则必须复制它。
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 使用指针从C++中的数组中获取最大值
- 如何获取std::result_of函数的返回类型
- 如何在openssl-ecc中获取十六进制格式的私钥
- 有根的二进制搜索树.保留与其父级的链接
- 使用Unreal C++获取VR耳机的世界位置/方向
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 从C字符串中获取奇怪的字符串长度
- 为多个会话保留XPtr
- 为什么我的for循环不能正确获取argv
- 从python中调用C++函数并获取返回值
- 如何获取一个数字的前3位
- 获取字符串的长度并将其分配给数组
- 无法获取菜单选择以运行函数.C++
- 数组长度,为什么从命令行获取时不能使用它?
- 如何从 std::optional 中获取 QByteArray<QByteArray>,并在没有其他 malloc 的情况下保留 std::nullopt?
- 获取提升程序选项以在函数范围之后保留
- 如何在C++中有意地保留和获取悬空指针