分叉期间未创建内存副本

Vip*_*pta 5 c++ fork

根据这个链接和写时复制的概念,当我们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)