当前位置: 首页 > 内存管理 > 正文

内存管理器(二十)自动内存管理的开始

前言

内存管理器系列博客将会以“内存的分配与回收”为主题,继续学习实现各种内存管理算法。

显示释放内存的概况

对于不支持自动内存回收的语言来说内存管理一直是一个令人头疼的问题。最近我再做PARALLEX操作系统时也整好被内存管理纠缠住了。所以我想要继续进行内存管理方面的研究。JAVA等语言有自己的垃圾回收机制,但是效率却是硬伤,C语言的内存管理到是很简洁,但是因为它的本质过于直白。在面向对象上并不是那么的方便。所以C++诞生了。

C++这门语言有点傲娇,想要真正掌握于鄢本省,是需要花费很大功夫的,相对于都是面向对象语言的JAVA,OC, C# ,SWIFT  来说性价比确实不高,从一个软件工程师的角度看来,性价比真心低,而且不是一点点,但是它也有自己优秀的地方,那就是效率。

C++是就像是太极拳一般,非深厚内功真是不好驾驭,但是掌握了又是一大利器。C++最近几年也在不断的更新自己的标准C++11/14 ,相信在未来它还是有不俗的表现。

不多扯了,C++ 的自动内存管理到现在我所知道的一共出现了auto_ptr  ,unique_ptr,shared_ptr  这三种。事实上C++11也并没有引入垃圾回收机制。

并且对于小内存对象来说,智能指针本身的消耗也不少,在失去了编译器,运行时系统的支持下,并不是一种很好的自动内存管理方式。

总之,内存管理是一个通常存在于软件工程中的问题。垃圾回收的优秀程度影响到了内存管理层次之间的耦合性,能不引用外来的内存管理库更有利于代码的可复用性。当然,没有银弹适用于所有软件工程。

垃圾回收的几种标准:

1.安全性

如果不安全不如不进行回收,坐等爆炸好了。

2.吞吐量

作为一个内存管理器,需要适用于多种内存分配场景。

3.完整性与及时性

回收完整,并且及时。这里主要是针对性能提出要求。

4.停顿时间

停顿执行回收的策略应当设计适当,例如有并行回收器,增量回收器。

5.空间开销

内存管理的开销应当保持适当。

6.针对特定语言的优化与扩展与移植性

7.测试程序需要专业的套件,需要统计学方法

堆内存描述

Pointers(N) = {a | a = &N[i], ∀ i :0 <= i < |N|  若N[i]   是一个指针}

不可达或者死亡的描述

reachable = {N ∈ Nodes | ( ∃ r ∈ Roots : r  -> N) ∨ ( ∃ M ∈ reachable : M -> N)}

这个可能不太好理解,这是一个递归闭包关系。首先,当[ ( F ∈ M) && (*F = N) ] => M->N

并且(M ∈ ROOT ,*F = N )=》  root -> N  ,所以有以上描述。

 

 

 

本文固定链接: http://zmrlinux.com/2016/08/02/%e5%86%85%e5%ad%98%e7%ae%a1%e7%90%86%e5%99%a8%ef%bc%88%e4%ba%8c%e5%8d%81%ef%bc%89%e8%87%aa%e5%8a%a8%e5%86%85%e5%ad%98%e7%ae%a1%e7%90%86%e7%9a%84%e5%bc%80%e5%a7%8b/ | Kernel & Me

该日志由 root 于2016年08月02日发表在 内存管理 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: 内存管理器(二十)自动内存管理的开始 | Kernel & Me