STL的空间配置器(allocator)
创始人
2024-05-31 18:52:51
0

简答:

在C++STL中,空间配置器便是用来实现内存空间(一般是内存,也可以是硬盘等空间)分配的工具,他与容器联系紧密,每一种容器的空间分配都是通过空间分配器alloctor实现的。


解析:

1.两种C++类对象实例化方式的异同在c++中,创建类对象一般分为两种方式:
一种是直接利用构造函数,直接构造类对象,如Test test();另一种是通过new来实例化一个类对象,如Test* pTest=new Test;
那么,这两种方式有什么异同点呢?
我们知道,内存分配主要有三种方式:
(1)静态存储区分配:内存在程序编译的时候已经分配好,这块内存在程序的整个运行空间内都存在。如全局变量,静态变量等。
(2)栈空间分配:程序在运行期间,函数内的局部变量通过栈空间来分配存储(函数调用栈),当函数执行完毕返回时,相对应的栈空间被立即回收。主要是局部变量。
(3)堆空间分配:程序在运行期间,通过在堆空间上为数据分配存储空间,通过malloc和new创建的对象都是从堆空间分配内存,这类空间需要程序员自己来管理,必须通过free()或者是delete()函数对堆空间进行释放,否则会造成内存溢出。
那么,从内存空间分配的角度来对这两种方式的区别,就比较容易区分:
(1)对于第一种方式来说,是直接通过调用Test类的构造函数来实例化Test类对象的,如果该实例化对象是一个局部变量,则其是在栈空间分配相应的存储空间。
(2)对于第二种方式来说,就显得比较复杂。这里主要以new类对象来说明一下。new一个类对象,其实是执行了两步操作:首先,调用new在堆空间分配内存,然后调用类的构造函数构造对象的内容;同样,使用delete释放时,也是经历了两个步骤:首先调用类的析构函数释放类对象,然后调用delete释放堆空间。2.C++STL空间配置器实现
很容易想象,为了实现空间配置器,完全可以利用new和delete函数并对其进行封装实现STL的空间配置器,的确可以这样。但是,为了最大化提升效率,SGI STL版本并没有简单的这样做,而是采取了一定的措施,实现了更加高效复杂的空间分配策略。由于以上的构造都分为两部分,所以,在SGI STL中,将对象的构造切分开来,分成空间配置和对象构造两部分。
内存配置操作:通过alloc::allocate()
实现内存释放操作:通过alloc::deallocate()
实现对象构造操作:通过::construct()
实现对象释放操作:通过::destroy()
实现关于内存空间的配置与释放,SGI STL采用了两级配置器:一级配置器主要是考虑大块内存空间,利用malloc和free实现;二级配置器主要是考虑小块内存空间而设计的(为了最大化解决内存碎片问题,进而提升效率),采用链表free_list来维护内存池(memory pool),free_list通过union结构实现,空闲的内存块互相挂接在一块,内存块一旦被使用,则被从链表中剔除,易于维护。

相关内容

热门资讯

男主叫陆夜寒女主叫唐映雪的重生... 男主叫陆夜寒女主叫唐映雪的重生小说名字和在哪儿可以看?好像是《从仙界归来的神厨》
小学生吃零食的坏处 小学生吃零食的坏处小学生吃零食的坏处我以前小学经常吃零食,吃多了就不想吃饭,只想吃零食,不知里面加了...
激励自己的句子霸气 激励自己的句子霸气我命由我不由天,这句怎么样?天都不怕还怕谁现在不努力以后没媳妇
卖油翁 改写 卖油翁 改写急急急,等... 急急急,等 展开那是一个北宋时期的晴空万里的早晨。 陈尧咨曾经在自...
热泪什么什么四字词 热泪什么什么四字词热泪盈眶_成语解释【拼音】:rè lèi yíng kuàng【释义】:盈:充满;...
《陈情令》中的演员朱赞锦也曾出... 《陈情令》中的演员朱赞锦也曾出演《东宫》,在这两部戏中他的表现如何?演的挺不错的,挺喜欢看《东宫》这...
招商银行全称是什么? 招商银行全称是什么?请问您是要查询开户行全称吗?若是,请您进入我行主页, 点击右侧“个人银行大众版”...
求十一字祠堂大门对联,要求继成... 求十一字祠堂大门对联,要求继成祖业,长宗接代,人财两盛,上联岚字开头,下联用峯字开头上联:岚美紫气先...
有关《一起来看流星雨》 有关《一起来看流星雨》请问昨天晚上的第二集,也就是第18集演的什么啊?我想要剧情,谢谢端木介绍雨荨到...
各种乐器的英语单词? 各种乐器的英语单词?cornet 短号 trombone 长号 tuba 大号 kettle dru...
凯普(强殖装甲)出完了吗,出到... 凯普(强殖装甲)出完了吗,出到哪一集了,预计什么时候出完?从我上小学就连载,现在我都30了。刚出到二...
能不能把你的人皮类变身小说发给... 能不能把你的人皮类变身小说发给我?人皮什么的都删了只留了几本比较经典的什么变身休真记什么的
三国演义中著名的故事 三国演义中著名的故事三国演义精彩章回之(三十)战长沙(关黄对刀)。赤壁得胜刘备喜, 众将立功云长虑。...
乘法分配律乘法结合律乘法交换律... 乘法分配律乘法结合律乘法交换律除法分配律加法交换律乘法交换律:两个数相乘,交换因数的位置,积不变。a...
古语有云耕当问奴织当问婢不可改... 古语有云耕当问奴织当问婢不可改也的断句是什么?古语有云 耕当问奴,织当问婢,不可改也
齐女两袒 齐女两袒【原文】齐人有女,二人求见。东家之子丑二富,西家子好而贫。父母疑不能决,问其女,定所欲适:“...
葫芦娃是讲什么的 葫芦娃是讲什么的 葫芦娃又名《葫芦兄弟》,讲述七个本领高强的兄弟,为救爷爷和妖怪进行斗争,最后成功把...
长孙皇后的真名是什么? 长孙皇后的真名是什么?我记得现在有两个版本,一个是“长孙无蓉”一个是“长孙无垢”不知道还有没有别的,...
支葵千里的父亲是玖兰李土对吧? 支葵千里的父亲是玖兰李土对吧?那为什么千里的姓氏是支葵而不是玖兰呢?难道纯血种跟贵族生的孩子就不可以...
这故事什么意思 这故事什么意思 她妈妈把他爸爸杀了,女孩逐渐怀疑他爸爸死了,就去偷听,那个男的是她妈妈的情夫,她妈妈...