C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了C中的软(非弱)引用 – 是否可能?有实施吗?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
在C中,我使用boost :: shared_ptr和boost :: weak_ptr来自动删除不再需要的对象.我知道这些工作与引用计数.

Java中,内存由垃圾收集器管理,垃圾收集器认为内置对象引用为强,WeakReference为弱,而SoftReference为中间(可能由GC收集,但也可以在GC中存活),这是对于缓存对象有一段时间非常方便,但是一旦可用内存不足就把它们丢弃.

所以现在我又回到了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中模仿这种行为,你必须构建一个内存感知的引用缓存,它对你的应用程序的其余部分将保持弱的对象持有强引用.当缓存确定应用程序正在虑其内存使用上限 – 或任何其他约束条件 – 它将释放强引用,放弃对象“收集”(达到零引用计数)并允许稍后使用的弱引用检测失效.

大佬总结

以上是大佬教程为你收集整理的C中的软(非弱)引用 – 是否可能?有实施吗?全部内容,希望文章能够帮你解决C中的软(非弱)引用 – 是否可能?有实施吗?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。