c父级和子级进程的变量值

shi*_*arg 1 c c++ parent-child

我正在编写用于制作父子进程的代码

int main
{
    pid_t =pid;
    pid=fork();
    int a=21;
    if(pid==0)
    {
        a=25;
        printf("%d child \n",&a);
        printf("%d child \n",a);
    }
    if(pid!=0)
    {

        printf("%d parent \n",&a);
        printf("%d parent \n",a);
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的输出地址变量a由父进程和子进程打印相同.我研究过,当我们分叉一个进程时,每个子进程都会创建一个变量副本.如果这是真的那么地址必须是不同的.

如果这是假的,那么当子进程首先执行时,它将改变存储a的位置的值.但是我的父进程将值打印为21(根据其副本...)

mer*_*011 6

fork原因整个地址空间被复制.这意味着变量将在父进程和子进程中具有相同的地址.

而且,复制的地址空间是独立的.如果子项更改了特定地址的值,则父项将不会看到它.谁首先执行并不重要,21在这种情况下父母将始终打印.

您可能正在考虑线程,其中地址空间在多个线程之间共享.