首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >确定性可控全自动内存管理

确定性可控全自动内存管理
EN

Software Engineering用户
提问于 2013-02-21 15:09:58
回答 6查看 594关注 0票数 2

全自动内存管理大大提高了生产率和完整性,但通常的实现(GC)有一个关键问题。这是不确定的,也是无法控制的。这导致许多问题,如突发CPU负载,这是关键的实时应用程序。某些类型的优化(增量/并发GC)可以减少这些问题,但仍然是不确定的,不能完全消除问题。

我一直认为GC永远不能解决这个问题,但最近,我认识到GC操作不需要完全隐藏。通过公开一些设计正确的行为控件,GC也可以是确定性的和CPU突发的.

我认为(RC +手动调用循环检测)可以做到这一点。但这看起来不太有效。是否有更好的方法来实现确定性和可控的全自动内存管理?或者我可以获得一些到示例实现的链接吗?

编辑

我增加了这些行,以使我的问题更清楚。

  • 在这种情况下,确定性和可控性意味着用户可以在创建和销毁对象时跟踪和运行代码。并控制内存管理操作负载的数量和时间。
  • 全自动意味着它像GC一样分配和清除内存,而不需要额外的关注。
EN

回答 6

Software Engineering用户

发布于 2013-02-21 15:16:38

让我换个说法。

他说:“我是否可以取得一个绝对完善的内存管理系统,并拥有每一个理想的特性?”

不存在这样的系统。

票数 5
EN

Software Engineering用户

发布于 2013-02-21 17:06:17

C++ RAII模型为您提供确定性和自动内存管理(从库使用者的角度)。这不是你想要的,但这是个开始。尽管它是一种可选择的设计,但您必须显式地选择将它与智能指针一起使用。从理论上讲,库用户对内存管理一无所知,并获得与Java相同的自动清理功能。

也许一种带有“强制”RAII的语言可以接近你想要的东西。

RAII的确定性很好,因为它允许您将同样的技术应用于比内存更珍贵的资源。例如连接和手柄。

代码语言:javascript
复制
void foobar()
{
    //connections are even more precious than memory. A leak is bad news.
    Connection conn("foobar");
    conn.Open();
}//conn is automatically closed as it leaves scope. Memory is free too.
票数 4
EN

Software Engineering用户

发布于 2013-02-21 17:39:07

Butler Lampson在“计算机系统设计提示”(操作系统评论,1983年10月15日,第33至48页)中描述了一个系统,它结合了一个基于自动参考计数的增量收集器和一个可以清除无法到达的循环引用的跟踪和扫描收集器。其思想是,应用程序可以依靠增量收集来完成大部分工作,然后执行“停止世界”垃圾收集“在咖啡休息期间用于回收累积的循环结构。”

根据那篇论文,这是在Interlisp和Cedar编程环境中实现的.它引用了两篇我还没有读过的文章--兰普森声称--更详细地描述了这位收藏家:

  • Burton,R.R.等人。Interlisp概述。在关于Interlisp的论文中,技术报告SSL-80-4,施乐帕洛阿尔托研究中心,1981年。
  • Deutsch,L.P.和Bobrow,D.G.,一个高效的增量式自动垃圾收集器。通信。ACM 19,9,1976年9月,第522-526页。
票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/187881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档