关于 copy-on-write 写时复制

先举个小例子,在我们学习c++的时候,我不相信老师没跟你提过什么是字符串string浅拷贝深拷贝的问题,就是:

string a = "i am a programer";

string b = a;

这是所谓的浅拷贝,当然我们不是在讨论浅拷贝的问题,我只是让大家知道b只是字符串"i am a programer"的一个引用,与a有相同的地位,他们都指向同一块内存地址,有兴趣可以输出一下他们的地址,一定是同一个值。(注意:在vc6.0下如此,但vs2008已经不是这样了

当然这是我们只想简单的引用这个字符串的内容。当我们尝试去修改b的值时,如b = “i am a worker"; 之后在输出a和b的地址,这时你会发现,他们的地址不一样了。这就是使用了写时拷贝技术。

说白了就是在复制内存时,先共享原有内存空间,等待不得不复制的时候再去复制。因为复制内存是一件十分奢侈的事情。

下面我们从进程的角度来谈。

在新的进程创建了之后,这个新创建的进程会暂时共享其父进程的内存空间,也就是说子进程(新创建的进程)会复制所有与父进程内存空间相关的信息并使用它。写时复制(coty-on-write)就是针对内存复制的一种技术。上文说到,内存复制是一件十分奢侈的事情,它开销很大,因此,在父进程创建子进程时,子进程直接共享父进程的内存空间,而不去复制它。当有必要修改这个共享内存空间时,子进程才会将父进程的内存信息复制到自身的内存空间中,然后进行修改。在Android操作系统中就用到了这项技术。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值