自动内存管理技术的思考
2010-02-08 13:27
211 查看
我是一个学过一点c++语言的人。在c++中,没有自动内存管理,却有很多可以值得借鉴的思路。
我认为一个内存,申请了,却不用,然后,不用了,却不释放,都是一种资源浪费,而不是说,程序最终都会在某一个时刻回收释放就叫防止内存泄漏了。就算有一小部分内存我是永远都用不上,泄露了,而相对有大部分内存不能好好利用上,那个更加不合理?因此,内存泄露是很广义的,程序应该协调好,提高内存利用才是正道。
.net框架的内存管理问题,在于对释放点的不确定,宏观的管理有时候是好的,但是程序往往有局部性,对细颗粒的控制往往是稳定性和性能的关键。至于如何提高这些内存的利用率,我觉得还是c++那套实在,什么时候用,什么时候申请,什么时候不用,什么时候释放。
在函数的的变量,是在栈中申请的,会在函数结束后,完成释放。这是一个内存管理的典范。
而建立在堆上的动态申请的内存,才是万恶的根源。当然,动态内存是有很多使用价值的。c++的做法是利用类的机制,创建的时候申请内存,消亡的时候释放内存,非常有效。虽然默认是手工实现,但是也能使用点技术手段达到自动管理。
真正的问题在于类的对象成员。对象成员可以指向自身,也可以指向另一个对象,那个对象又有对象成员指向出发对象,等等而形成一个回路。
因此,总结导致复杂性的问题根源在于:
1.对象(如.net 的类实例,而不是结构实例)
2.对象的对象成员
3.对象的对象成员的类延伸出去,最终在某个类有兼容出发类型的成员对象。
这些是必要而不是充分的条件。但是从这些条件,改进编译器,让其识别出来,也能够简化不少情况的处理。
然后让我们直面惨淡的对象回路问题吧。
对象回路在结构上来说,类似有多个根节点,然后加一个有向网路,网路节点可能还有一些没有回路的枝叶。
释放的条件是:
1.根节点等于0整个结构释放
2.任意一节点的引用计数等于0,释放该节点和减少后继结点计数
我认为一个内存,申请了,却不用,然后,不用了,却不释放,都是一种资源浪费,而不是说,程序最终都会在某一个时刻回收释放就叫防止内存泄漏了。就算有一小部分内存我是永远都用不上,泄露了,而相对有大部分内存不能好好利用上,那个更加不合理?因此,内存泄露是很广义的,程序应该协调好,提高内存利用才是正道。
.net框架的内存管理问题,在于对释放点的不确定,宏观的管理有时候是好的,但是程序往往有局部性,对细颗粒的控制往往是稳定性和性能的关键。至于如何提高这些内存的利用率,我觉得还是c++那套实在,什么时候用,什么时候申请,什么时候不用,什么时候释放。
在函数的的变量,是在栈中申请的,会在函数结束后,完成释放。这是一个内存管理的典范。
而建立在堆上的动态申请的内存,才是万恶的根源。当然,动态内存是有很多使用价值的。c++的做法是利用类的机制,创建的时候申请内存,消亡的时候释放内存,非常有效。虽然默认是手工实现,但是也能使用点技术手段达到自动管理。
真正的问题在于类的对象成员。对象成员可以指向自身,也可以指向另一个对象,那个对象又有对象成员指向出发对象,等等而形成一个回路。
因此,总结导致复杂性的问题根源在于:
1.对象(如.net 的类实例,而不是结构实例)
2.对象的对象成员
3.对象的对象成员的类延伸出去,最终在某个类有兼容出发类型的成员对象。
这些是必要而不是充分的条件。但是从这些条件,改进编译器,让其识别出来,也能够简化不少情况的处理。
然后让我们直面惨淡的对象回路问题吧。
对象回路在结构上来说,类似有多个根节点,然后加一个有向网路,网路节点可能还有一些没有回路的枝叶。
释放的条件是:
1.根节点等于0整个结构释放
2.任意一节点的引用计数等于0,释放该节点和减少后继结点计数
相关文章推荐
- 使用引用计数扩展c语言实现内存自动管理的思考 -- 为什么存在内存泄露
- oracle自动内存共享管理测试。修改 oracle 11g SGA_MAX_SIZE。
- 自动内存管理机制_运行时数据区域
- 在星巴克买咖啡思考技术团队的管理
- 【自动内存管理机制】(1)Java内存区域(方法区、虚拟机栈、本地方法栈、堆、程序计数器)与内存溢出异常
- 技术分享:VPS小内存LNMP服务器Nginx 502 Bad Gateway故障一分钟内自动恢复解决办法
- 深入理解JVM学习笔记-自动内存管理机制
- 程序员的思考:一年管理成富翁,三年市场路路通,十年技术一场空
- 《深入理解java虚拟机》学习-第二章-自动内存管理机制
- oc 利用retain关键字自动管理内存
- 阿里云云盾 · 云防火墙技术解读:零配置业务自动分组,安全管理有序、可见
- iOS 非ARC基本内存管理系列 2-多对象内存管理(3) 利用@property来自动管理内存
- Linux企业级开发技术(6)——libevent企业级开发之内存管理
- Oracle 11g 新特性之---Oracle 内存自动管理
- 网络游戏制作技术(四)—— 服务器内存管理部分
- Delphi内存管理(Integer、Boolean、Record、枚举等都是在作用域内编译器自动申请内存,出了作用域自动释放;另外,字符串、Variant、动态数组、接口也是由Delphi自动管理)
- 一道算法题引发的动态内存管理的思考
- 深入理解java虚拟机阅读笔记二:java自动内存管理机制以及垃圾回收机制
- OpenCV 2.4.9 学习笔记(2)—— OpenCV内存自动管理
- 技术走向管理一些思考