为什么C不能有可选的透明垃圾收集器

为什么C不能有可选的透明垃圾收集器,第1张

概述有一个相关的问题,但这个有点不同,我对相关问题的任何答案都不满意:) 我将通过声明不可能为C提供可选的透明垃圾收集器并希望有人会证明我错了来问这个问题.是的,Stroustrup尝试了这一点并且一再失败,不是因为技术问题,而是因为一致性问题.性能不是问题. C永远不会有这样一个收集器的原因是,在没有收集器的情况下运行的程序是可选的,必须手动实现所有必需的内存管理.添加收集器可能会带来一些性能优势, 有一个相关的问题,但这个有点不同,我对相关问题的任何答案都不满意:)

我将通过声明不可能为C提供可选的透明垃圾收集器并希望有人会证明我错了来问这个问题.是的,Stroustrup尝试了这一点并且一再失败,不是因为技术问题,而是因为一致性问题.性能不是问题.

C永远不会有这样一个收集器的原因是,在没有收集器的情况下运行的程序是可选的,必须手动实现所有必需的内存管理.添加收集器可能会带来一些性能优势,但不清楚它们是否值得(是的,收集器可以更快).

你无法获得的是自动内存管理,这是渴望收集器的主要原因.您可以通过强制收集获得此功能(如果您选择进行正确的手动管理,则无需牺牲RAII或其他内容).具有可选手动内存管理功能的强制收集器是可行的.

不幸的是,获得强制收集器的唯一方法是创建与不使用收集器的早期版本的C不兼容:换句话说,如果我们想要自动透明内存管理,我们必须定义一种新语言.

所以我的论点是:C永远不会有垃圾收集,因为它被锁定在一个需要向上兼容的历史开发中:强制收集和可选的手动内存管理是可行的,但透明的可选垃圾收集不是.

通过展示一个可选的透明垃圾收集模型证明我错了!

编辑:

噢..我想我有答案.有人可以引用标准,它需要程序删除堆分配的对象吗?

因为:该子句(如果存在)是唯一阻止可选透明垃圾收集的子句.甚至可能有足够的时间从C 1x中删除该子句.

如果没有这样的子句,程序可能会泄漏内存而不会出现未定义的行为:内存不足时的行为与通常情况相同.因此,对垃圾收集器执行 *** 作将不会对指定的语义执行任何 *** 作:它们是否定义良好,与是否使用收集器无关.

解决方法

Prove me wrong by exhibiting a tenable optional transparent garbage collection model!

见:C++/CLI.

将垃圾收集器与现有C代码放在一起的困难在于C通常依赖于确定性对象破坏以使事情发生;正如在RAII中所做的那样.当然,垃圾收集器能够使大多数类型的内存RAII透明,但是大量与RAII相关的概念与内存无关.例如,套接字,流和锁都适用于某种形式的RAII管理,如果不保留确定性破坏,这些都不会很好.

因此,它可能不会是“透明的” – 它必须是类似于C/C++li的东西,你必须说“我希望这是垃圾收集” – 但它绝对是合理和可能的.

总结

以上是内存溢出为你收集整理的为什么C不能有可选的透明垃圾收集器全部内容,希望文章能够帮你解决为什么C不能有可选的透明垃圾收集器所遇到的程序开发问题。

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1223797.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存