我知道
我编写了一些代码并打印了结果。看起来父进程和子进程都指向相同的内存位置,然而在这些内存位置上所做的更改(例如父进程中的
我知道当调用
fork()
函数创建一个和父进程相同的进程,只有PID不同。它们最初具有相同的变量,并且对这些变量所做的更改不会互相影响。但是当全局指针变量被共享时会发生什么?我编写了一些代码并打印了结果。看起来父进程和子进程都指向相同的内存位置,然而在这些内存位置上所做的更改(例如父进程中的
*p = 1
和子进程中的*p = 2
)不会相互影响。还要注意,我让父进程wait(NULL)
直到子进程退出。因此,子进程更改了指向与父进程指针相同内存地址的指针所指向的值。我知道当调用
fork()
时,父进程克隆了所有内容:寄存器、程序计数器等等。但这是如何实现的呢?难道子进程退出后,父进程的变量值不应该已经发生了变化吗?这是因为系统将所有内容(包括父进程的指针变量)放入栈中,并在子进程终止时弹出它们吗?