gpt4 book ai didi

c - 如何实现确定性 malloc

转载 作者:IT王子 更新时间:2023-10-29 00:42:59 25 4
gpt4 key购买 nike

假设我有两个应用程序实例,具有相同的输入和相同的执行顺序。因此,一个实例是一个冗余实例,用于将内存中的数据与另一个实例进行比较,作为一种错误检测机制。

现在,我希望所有内存分配和释放在两个进程中以完全相同的方式发生。实现这一目标的最简单方法是什么?写我自己的 malloc 和 free?那么用其他函数(例如 mmap)分配的内存呢?

最佳答案

不是确定性的不仅是 malloc但是 mmap (获得更多内存空间的基本系统调用;它不是一个函数,它是一个 system call 所以从应用程序的角度来看是基本的或原子的;所以你不能在应用程序中重写它)因为 address space layout randomization在 Linux 上。

你可以禁用它

 echo 0 > /proc/sys/kernel/randomize_va_space

以 root 身份,或通过 sysctl .

如果您不禁用地址空间布局随机化,您就会陷入困境。

你确实问过类似的问题 previously ,我在那里解释说您的 malloc -s 并不总是确定性的。

我还是觉得对于一些实际的应用, malloc不能是确定性的。想象一下,例如一个程序有一个由 pid 键控的哈希表。 -s 它正在启动的子进程。该表中的冲突在您的所有流程中都不会相同,等等。

所以我相信你不会成功制作 malloc确定性在您的意义上,无论您尝试什么(除非您将自己限制在非常狭窄的应用程序类别以检查点,如此狭窄以至于您的软件不会很有用)。

关于c - 如何实现确定性 malloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8415747/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com