查看单个帖子
  #26 (permalink)  
旧 2008-02-19
polyrandom 的头像
polyrandom polyrandom 当前离线
超级版主
 
注册日期: 2002-09-03
帖子: 3,138
文章: 20
polyrandom 正向着好的方向发展
默认 回复: 请教各位大大关于动态内存管理的问题……

引用:
作者: sjinny 查看帖子
这么晚还在线啊……

实践上发生的概率我也说不清。
ref count的慢和浪费我觉得如果少用那么是可以接受的,按照我心中的优先顺序是:桟 > 内存池 > 智能指针 >= gc。
所以大多数情况下应该把生存期分析清楚了,用前两个来做。我发的这些帖子,就是希望能够找到更多的机制,来填补智能指针之前的空白,毕竟桟和内存池的表达力还是有限的。
其实,自动化的目的是为了减少人脑资源的耗费,而高确定性则是让人比较容易了解系统运行的过程,从而提高可靠性改善的可能以及性能优化的可能。

至于那些wrapper,既然叫做wrapper,那么就是不需要重复写很多遍的东西。很多操作,如果只做一次,人们往往能够做好,要重复做很多遍就难免不出错了。所以把addRef和subRef封装起来后,智能指针的使用就容易了很多。
当我们在一个体系里面有多个选择的时候,你说的那个顺序可能没错。问题是,选择越多,错误越多。C++程序写到现在,一点内存错误都没有犯过的人有几个?为什么犯错误呢?往往是该释放的没释放,或者不该释放的释放了。这往往就是程序员在选择方式的时候错了。无论这个“桟 > 内存池 > 智能指针 >= gc”是不是对的,假设我在某个语言/平台上,我只允许你永远使用这些方法中的一个,你会怎么选择呢?事实上,stack不能作为唯一的形式出现,heap可以,但是仅有heap没有stack的情况下,为什么不加入gc呢?
回复时引用此帖