gpt4 book ai didi

c - fork 过程中的确定性 malloc

转载 作者:太空狗 更新时间:2023-10-29 12:06:56 25 4
gpt4 key购买 nike

我想要的是让 fork 进程(它是其父进程的副本)从每个 malloc 函数调用中获取与其父进程相同的返回地址。我怎样才能做到这一点?

实际上我想要实现的是有两个复制的进程,它们执行相同的事情。我这样做基本上是为了检测软错误,也就是说,如果有任何分歧,那一定是由于错误,而不是非确定性。现在,由于 malloc 是不确定的,它会使两个进程分道扬镳,我想避免这种情况。

如果那不可能,我可以记录 malloc 为父进程返回的地址并为 fork 进程使用相同的地址吗?这行得通吗?

最佳答案

如果您的系统是 Linux,那么您可以通过禁用地址空间随机化来获得更多可重现的地址。您可以使用此命令实现(以 root 身份运行)

echo 0 > /proc/sys/kernel/randomize_va_space

(但地址空间随机化是一项可以提高系统安全性的功能)

然而,这并不能保证父进程和子进程会得到相同的行为(因为它们之间有一个小的区别:fork() 的返回和它们的 pid)。而且你不能确定他们的分配模式是否足够相似。想象一下,如果在 fork 之后( fork 的)程序执行类似

 char *p = malloc (8192*(3 + (getpid() % 10) + time(NULL) % 100));

那么您应该期望 malloc 在父子中请求大不相同的大小,并具有不同的 malloc 返回地址。所以这个人为的例子表明你的要求是不现实的。

关于c - fork 过程中的确定性 malloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8185435/

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