zoukankan      html  css  js  c++  java
  • 自动内存管理技术的思考

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

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

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

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

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

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

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

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

    2.对象的对象成员

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

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

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

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

    释放的条件是:

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

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

  • 相关阅读:
    idea vue.js插件安装
    vue.js 开发环境配置
    Stream grouping-storm的流分组策略
    Kafka web console安装
    call 方法 (Function) (JavaScript)
    bind 方法 (Function) (JavaScript)
    CSS选择器、优先级和常用的选择器
    CSS3.0盒子模型:display:-webkit-box
    有了自己的博客了
    Javascript进阶篇——(DOM—节点---获取浏览器窗口可视区域大小+获取网页尺寸)—笔记整理
  • 原文地址:https://www.cnblogs.com/Nobel/p/1665853.html
Copyright © 2011-2022 走看看