涅磐重生C++内存管理变革

涅磐重生C++内存管理变革,第1张

涅磐重生C++内存管理变革,第2张

分配器引起的概念变化

接触一下allocator,你就能体会到它和C++传统的new/delete概念的区别。主要有以下几点:

1.每个类(或算法)都有自己最适合自己的内存管理机制,而不是像C++的传统做法那样使用一个全局的new/delete。你可能会说,C++不是也允许类定义自己的new和delete吗?是的,C++确实支持类定义自己的new/delete,但是注意它的想法和allocator的完全不同。我不认为它是C++的优秀作品,相反,它有误导性。

因为决定如何从new中获取一个类对象的不是类本身,而是使用它的人。一个类不需要关心它是如何创建的,更不用说假设了。它需要关心的是它自己的类成员是如何创建的,它的算法(你可以把一个类想象成一组算法)涉及的所有组件是如何创建的。而这就是allocator带来的概念。

让不同的分配器创建同一个类的不同实例,它们甚至可以一起工作,互相合作。从STL的角度来看,这是最正常的事情。

2.通过分配器创建管理对象并避免在代码中使用new/delete是很重要的。如果可能的话,可以像STL一样使用allocator作为模板参数,不需要绑定特定的内存管理器。然而,如果您的算法依赖于分配器的特定功能,这并不重要。你的目标不是让分配器可替换,是吗?重要的是使用这个分配器,它给你带来了内存管理的好处。

不过需要注意的是,STL实现的各种分配器,除了malloc/free实现的最简单的一种,主要都是基于mempool技术。这项技术的目标并不是让内存用户更方便有效地管理内存,而是更加关注内存分配的时间性能。为了将C++程序员从内存管理中解放出来,我们需要实现一个新的分配器,并取得新的突破!

新视角:具有垃圾收集能力的分配器

是的,我的一个想法是实现STL的分配器概念,为各种分配器提供特定的内存管理能力(比如垃圾回收)。让C++社区广泛接受分配器的概念,并从中受益。C++程序员是时候抛弃传统的new/delete,让他们退出历史舞台了。

接下来,我将实现两个具体分配器(都是原始的)。我相信它们会让你耳目一新,让你觉得:哦,原来在C++里,我也可以这样管理内存。

当然,我希望这两个分配器能够起到抛砖引玉的作用,让大家清楚地认识到分配器的重要性,能够出现更多各种能力的分配器,从而让C++程序员从无时无刻的痛苦(可能是煎熬)中解脱出来。

两个分配器都有一定程度垃圾收集能力。只是各有侧重的想法罢了。接下来,我们将它们分成两个专题。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 涅磐重生C++内存管理变革

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情