根据这个链接和写时复制的概念,当我们fork子进程和父进程时最初指向同一块内存,直到其中一个进程修改了内存。然后它将创建该内存的副本并对该内存进行修改。但根据下面代码的输出,父进程和子进程都指向内存,即使它被子进程修改了。这其中有道理吗?
using namespace std;
using ULL = unsigned long long;
int gFlag = 0;
int main ()
{
gFlag = 1;
cout << (ULL)&gFlag << endl;
pid_t ret = fork ();
if (ret > 0) {
sleep (6);
cout << "Parent: " << gFlag << endl;
cout << "Parent: " << (ULL)&gFlag << endl;
return 0;
} else {
gFlag = 15;
cout << "Child: " << gFlag << endl;
cout << "Child: " << (ULL)&gFlag << endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
94022699245908
Child: 15
Child: 94022699245908
Parent: 1
Parent: 94022699245908
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
77 次 |
| 最近记录: |