Closed. This question is off-topic. It is not currently accepting answers. Learn more。
想改进这个问题吗?Update the question所以堆栈溢出的值小于aa>。
如果调用执行子代码的函数会发生什么情况?
父进程的地址空间被复制,但不能使用父进程的局部变量。
我知道,使用fork()时,只有在子进程或父进程中进行写入时,才会复制地址空间,因此,如果父进程中进行写入,则子进程将获得父地址空间的副本。
把子代码放在单独的函数中可以吗?
void child(){
//do something
}
int main(int argc, char const *argv[])
{
int x = 0;
int pid;
if((pid=fork()) < 0){
printf("error\n");
exit(1);
}
if(pid==0){
child();
}
x=12;
return 0;
}
最佳答案
子项获取父项地址空间的完整副本。因此,子对象可以访问父对象创建的指针,但只能访问到fork()
之前创建的指针。在fork之后,出于所有编程目的,每个进程都有父进程内存的副本。因此父(或子)的更改被约束到它们自己的块。
例如,假设父对象有指向字符缓冲区的指针。父块fork()
s,因此现在父块和子块都包含指向同一块的同一指针。如果父进程或子进程更改了该缓冲区,则另一个进程看不到更改。在硬件级别,内存块将在其他地方。进程是在一个虚拟地址空间中运行的,因此当两个程序的内存块发生变化时,为每个进程复制部分内存(以及整个页面)。
把子代码放在函数中没问题,实际上这是个好主意。
08-16 12:15