Ram*_*uri 3 c heap fork
我还没有理解fork()生成的进程.如果我尝试这样的代码:
int main(int argc, char** argv) { void* mem=malloc(100); pid_t pid=fork(); printf("%p\n",mem); }
两个进程都打印相同的地址.那么它们是否指向堆中的相同内存区域?这不危险吗?可能存在冲突.我的书说复制了堆栈上的值,但它没有谈论堆.
per*_*eal 5
不同的进程包含在单独的虚拟地址空间中,因此这些内存地址指向不同的内存位置.
正如Karoly Horvath所说,由于称为写时复制的优化,它有点复杂,它基本上允许只有一个副本,直到需要区分.这是通过页面错误实现的,最后两个单独的虚拟地址空间中的相同地址不是指相同的内存位置.
归档时间:
14 年,6 月 前
查看次数:
1135 次
最近记录: