【M29】引用计数
2024-10-15 23:23:46
1、引用计数这项技术,是为了让等值对象对象共享同一实体。此技术的发展有两个动机:a、记录堆上分配的对象,是垃圾回收机制的简单原理;b、节省内存,多个对象具有相同的值,存储多次很笨。速度更快,等值对象避免了对象复制,也就减少了构造和析构。
2、考虑,基于引用计数的String,String类中有个StringValue指针,stringValue包含char指针data和引用计数refCount。注意,refCount属于StringValue,不应该属于String,否则要有多个引用计数副本,还要保持同步。
3、考虑下面的问题,多个String共享同一个StringValue,如果只是读取操作,没问题。如果是写操作,修改其中一个String,我们期望其他的String不变。怎么办?
这种情况下,不能再共享了。必须构造出一个副本出来,修改副本,其他的String仍然共享。这就是Copy-On-Write,写时才复制。这也是缓式评估的一个例子。
问题又来了,对于String的操作[],如何区分读还是写呢?
使用代理类,CharProxy,copy赋值是写操作,隐式类型转换操作符是读操作。
4、还有一个问题,那就是先读取String的字符,取地址,在后面再去修改字符。这种情况下,检测不出来。该怎么呢?
默认情况下,StringValue是可以共享的,一旦取出其中的字符,StringValue标记是不能共享的,复制的时候必须深复制。
5、考虑代码复用,可以产生一个父类RCObject。
6、引用计数技术,本身需要付出一些代价。它的使用场景是:相对多的对象共享相当少的实值,对象实值构造析构成本大。
最新文章
- VSS 的修复和扫描
- Ms sql将首字母大写
- [Linux] 孤儿进程与僵尸进程[总结]
- SQL中distinct的用法(转自博主:Rain Man)
- 为什么要使用jQuery?
- Wordpress 网站搭建及性能监控方法详解!
- debian修改系统语言为英文
- STL 源代码剖析 算法 stl_algo.h -- random_shuffle
- django-xadmin隐藏菜单不显示
- 纯css去实现loading动画效果图
- 【CJOJ1167】【洛谷1894】[USACO4.2]完美的牛栏
- 数据库4m10d作业
- mybatis入门系列二之输入与输出参数
- Java链接MySQL数据库的用配置文件和不用配置文件的代码
- redis学习——redis应用场景
- asp.net core自定义模型验证——前端验证
- Codeforces 781C Underground Lab
- hdu-3671-tarjin/割点方案
- linux 如何运行rpm
- 第2课 类型推导(2)_decltype关键字
热门文章
- As3 常用日期工具
- Python自动单元测试框架
- [转]LoadRunner参数化详解
- (转载)OC学习篇之---Foundation框架中的其他类(NSNumber,NSDate,NSExcetion)
- miracast 协议wifi display
- 使用android SpannableStringBuilder实现图文混排
- UltraEdit中文乱码的解决方法
- 指令式Callback,函数式Promise:对node.js的一声叹息
- pthread_cond_wait 信号量丢失
- JQuery实现的动态Table(转)