0

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

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

我认为像volatile这样的标志可以解决问题,但与非易失性指令相比,这一切似乎只是保持其顺序位置。

4

1 回答 1

1

您很可能需要复制数据。

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

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

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

于 2016-05-04T03:05:56.290 回答