gpt4 book ai didi

operating-system - 为什么变量的地址在修改后在fork()系统调用中保持不变

转载 作者:行者123 更新时间:2023-12-04 17:25:37 24 4
gpt4 key购买 nike

考虑以下代码片段。

if (fork() == 0)
{
a = a + 5;
printf("%d, %d \n", a, &a);
}
else
{
a = a - 5;
printf ("%d, %d \n", a,& a);
}

AFAIK,当创建 fork() 时,父级的虚拟地址空间被复制到子级,并且子级和父级共享相同的物理页面,直到其中一个尝试修改。当 child 和 parent 中的一个修改变量时, parent 的物理页面被复制到另一个 child 的页面并且物理页面保持私有(private)。
所以,这里的“a”值在 child 和 parent 中是不同的。但是当涉及到 child 和 parent 中“a”的地址时,输出是相同的。即使物理页面不同,我也无法弄清楚为什么地址保持不变。

最佳答案

a的地址不是实际的物理地址。

它是一个虚拟地址。
硬件/操作系统层将虚拟地址映射到物理地址(对您的应用程序不可见)。

所以即使地址有相同的number它们不会映射到您的 ram 芯片上的相同物理内存。

PS。使用 printf() 打印地址(即指针)时最好使用“%p”

关于operating-system - 为什么变量的地址在修改后在fork()系统调用中保持不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10716164/

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