子プロセスは親プロセスのヒープアドレス空間にアクセス(読み取りおよび書き込み)できますか?以下は、 http://www.ideone.com/R5vDTで試した、正常に実行されているプログラムです。
int main(){
int *p = (int*)malloc(sizeof(int));
if(fork()){
//parent process
*p = 25;//Write
printf("Parent %d: %d %p\n", getpid(), *p, p);//Read
}else{
//child process
*p = 15;//write
printf("Child %d: %d %p\n", getpid(), *p, p);//read
}
return 0;
}
出力は次のとおりです。
Parent 30597: 25 0x9781008
Child 30600: 15 0x9781008
COW(コピーオンライト)について読んだことがありますが、pが指すアドレスは書き込み操作後も同じです。1つのプロセスがアドレス空間外のメモリにアクセスしているため、オペレーティングシステムで例外が発生することはありませんか?