C++ 代码之性能空间极限拉扯:「COW」 真乃神助攻(上)

以下内容为本人的烂笔头,如需要转载,请声明原文链接 微信公众号「ENG八戒」https://mp.weixin.qq.com/s/Rk2-tjIIbUh6yylPHZzEEg

什么是「COW」?它和代码性能、空间利用有什么关系?

设想,有个数据缓存,我们创建它用于存放数据。有数据更新时,我们就写入或者修改其中的数据,但是大部分时间我们都是在读其中的数据,即使拷贝数据也仅是为了单纯的读取。

如果每次从缓冲中读取数据,都要将数据完整拷贝一份过来,并存放在独享的另存空间里。据为己有,仅仅为了方便于后边可能会出现的修改数据的场景,这样岂不是既浪费存储空间,又浪费算力做无用功,占用 CPU 资源进而降低程序的运行效率。

可见,一般思路的读数据方法是有很大优化空间的。其实,在修改数据之前,被读取的内容大可不必真的另存,读数据只是为了了解状态,那么继续和数据的源有者共享不好吗?

这时就出现了一种需求,拷贝数据不需要真的复制数据,而只需要复制数据地址,达到数据共享,直到有一方需要修改其中的数据,在修改之前触发真正的复制,包括重新分配空间然后填充拷贝内容,这就是所谓的写时复制 (Copy-On-write),简称 COW。

巧的是,浅拷贝(shallow copy)和深拷贝(deep copy)说的也是类似意思。深拷贝和

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值