C中的软(非弱)引用 – 是否可能?有实施吗?
在C中,我使用boost :: shared_ptr和boost :: weak_ptr来自动删除不再需要的对象.我知道这些工作与引用计数.
在Java中,内存由垃圾收集器管理,垃圾收集器认为内置对象引用为强,WeakReference为弱,而 所以现在我又回到了C,我错过了软引用的舒适感.我想知道软引用是否适用于引用计数.当清除对象的最后一个强引用,并且仍然有一个软引用时,它什么时候会被删除?我可以想到一些方案,但对我来说似乎都不聪明. 为了防止软引用和引用计数有适当的语义,我想知道这是否已经实现,可能是以与boost :: shared_ptr(或者与此相关的C TR1等价的std :: shared_ptr)兼容的方式. 如果两个问题的答案都是否定的,那么对象缓存场景中的替代方案是什么? 编辑: 解决方法
正如其他人所指出的,你可以在Boost库中找到
referenced counted pointers(及其服务员
weak counterparts),但软参考思想中缺少的是对运行时环境的内存限制的一些了解.例如,在Java中,SoftReference在功能上与WeakReference没有实质性的区别;相反,面对记忆压力,它是
the contract for how the runtime will preserve or evict the two kinds of references.
为了在C中模仿这种行为,你必须构建一个内存感知的引用缓存,它对你的应用程序的其余部分将保持弱的对象持有强引用.当缓存确定应用程序正在考虑其内存使用上限 – 或任何其他约束条件 – 它将释放强引用,放弃对象“收集”(达到零引用计数)并允许稍后使用的弱引用检测失效. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |