回复: 请教各位大大关于动态内存管理的问题…… 当我花费时间回帖时我总是感觉到绝大多数的内容都不太可能被人仔细阅读……这样都能保持平静我是做不到的。至少是从我的角度看,你的确没有好好看我的帖子。
对于C++/CLI不熟悉。
但是对于你那个例子,我有个疑问:因为这个例子里仍然是确定性的生命期模型——程序员能够很明确的知道r的生命期。如果程序员不知道,而不得不采用智能指针或gc呢?也就是之前我也提过的问题:当无法使用栈和内存池的时候,有什么机制能够处理这种情况?而且仍然能够在析构函数或等价物中绑定其他操作?另一方面,如果采用了内存扫描,那么能不能确保在同一次collect过程中被释放的对象的释放顺序?比如一些对象在生命期结束时会把当前状态写入log,而这一操作是依赖于某个log对象的,而使用的log对象可能并不一直是同一个对象,这样当普通对象和log对象在同一次collect过程中被回收时,是否能确保log对象最后被回收?如果在两次collect之间,一批普通对象和对应的log对象都失去了来自根的直接或间接的引用,那么就可能在同一次collect中被一起回收。
至于你所描述的周期边界。第一,紧密包裹如果产生不良效应,那么你可以修改生命期模型,使它变得松散,可是如果反过来,你发现现有机制过于松散时,却并不一定能够使它变得更紧密。第二,通过增加间接层(比如叫做Session),session的生命期会紧密包裹一次调用,那么这也能解决问题。
一个能够提供更精密操作的机制,可以给你提供更大的余地;而反过来要使一个不那么精密的机制工作得更精密,却是件很难的事情。不能用误用来证明精密机制反而更糟……
好像我所列出的那些机制里,还没有哪个机制是3点里全都不符合的……不知道你的“不符合”是具体什么含义……如果是说“不完全符合”,那么我要说,我要找的是能够互相填补空白的工具集合,而不是一个完美的工具…… |