自动内存管理技术的思考

我是一个学过一点c++语言的人。在c++中,没有自动内存管理,却有很多可以值得借鉴的思路。

我认为一个内存,申请了,却不用,然后,不用了,却不释放,都是一种资源浪费,而不是说,程序最终都会在某一个时刻回收释放就叫防止内存泄漏了。就算有一小部分内存我是永远都用不上,泄露了,而相对有大部分内存不能好好利用上,那个更加不合理?因此,内存泄露是很广义的,程序应该协调好,提高内存利用才是正道。

.net框架的内存管理问题,在于对释放点的不确定,宏观的管理有时候是好的,但是程序往往有局部性,对细颗粒的控制往往是稳定性和性能的关键。至于如何提高这些内存的利用率,我觉得还是c++那套实在,什么时候用,什么时候申请,什么时候不用,什么时候释放。

在函数的的变量,是在栈中申请的,会在函数结束后,完成释放。这是一个内存管理的典范。

而建立在堆上的动态申请的内存,才是万恶的根源。当然,动态内存是有很多使用价值的。c++的做法是利用类的机制,创建的时候申请内存,消亡的时候释放内存,非常有效。虽然默认是手工实现,但是也能使用点技术手段达到自动管理。

真正的问题在于类的对象成员。对象成员可以指向自身,也可以指向另一个对象,那个对象又有对象成员指向出发对象,等等而形成一个回路。

因此,总结导致复杂性的问题根源在于:

1.对象(如.net 的类实例,而不是结构实例)

2.对象的对象成员

3.对象的对象成员的类延伸出去,最终在某个类有兼容出发类型的成员对象。

这些是必要而不是充分的条件。但是从这些条件,改进编译器,让其识别出来,也能够简化不少情况的处理。

然后让我们直面惨淡的对象回路问题吧。

对象回路在结构上来说,类似有多个根节点,然后加一个有向网路,网路节点可能还有一些没有回路的枝叶。

释放的条件是:

1.根节点等于0整个结构释放

2.任意一节点的引用计数等于0,释放该节点和减少后继结点计数

原文链接: https://www.cnblogs.com/Nobel/archive/2010/02/08/1665853.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    自动内存管理技术的思考

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/8103

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月6日 下午6:45
下一篇 2023年2月6日 下午6:45

相关推荐