linux进程操作

在上图中我们看到,是存储器对程序的存储空间。从低地址到高地址我们可以看到,右边的红括号代码正文部分,存储在最低地址部位,也就是左边图中的正文段。而而初始化的数据放在上面。而定义了变量未被初始化的数据,放在左边图中图中相应位置。其中的堆空间是未被初始化的变量使用申请空间的函数进行申请空间的地方。而栈空间是对函数的调用和函数中定义的变量进行存放。

在昨天我们使用的fork()函数中,我们知道父进程调用fork()会返回新进程的pid,他们有一样的数据,但是新进程会copy一份父进程的存储空间。但是,当新进程不修改一些数据,他们之间会共享内存,当新进程会修改数据,则不会共用一个空间。具体代码如下:

int main()
{
        pid_t pid;
        pid_t pid2;
        int a = 10;
        pid = getpid();
        printf("%d\n",pid);
        fork();

        pid2 = getpid();
        printf("%d\n",pid2);
        if(pid == pid2)
        {
                printf("this is father process\n");
        }
        else{
                printf("this is child print,child pid = %d\n",getpid());
                a= a+10;//在子进程中修改a的值
        }
        printf("%d,address:%d",a);
        return 0;
}

在这里,其中的子进程已经不和父进程共享a的空间。因为子进程对a进行了修改。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值