我了解 COW 机制会导致所有父页面和子页面指向相同的框架,并且它还包括堆栈。不过我不确定fork后当前栈页的情况如何。是否仍然在两个进程之间共享,并且第一次写入堆栈会导致页面错误?
if(fork () == 0){
char tmp = 'a';
}
else{
char temp2 ='a';
wait();
}
假设父进程先运行,会出现以下行:“char temp2 ='a';”导致页面错误? 或者可能因为 fork 本身写入堆栈会导致页面错误?
但是,我不确定fork之后当前栈页是什么情况。是否仍然在两个进程之间共享,并且第一次写入堆栈会导致页面错误?
堆栈页框也是由
fork
共享的写时复制,在堆栈上分配的对象保留其原始地址。第一次存储到写时复制页面中会创建原始页面框架的进程私有副本。