摘要: 1、第二级配置器的空间配置函数:allocate() __default_alloc_template 拥有配置器的标准接口函数 allocate(),毫无疑问,该函数首先得判断区块大小,大于128bytes就是用第一级配置器,小于或者等于128bytes 就检查对应的free-list,如果 fr 阅读全文
posted @ 2017-05-04 21:21 Forever-Road 阅读(443) 评论(0) 推荐(1) 编辑
摘要: SGI STL 第二级配置器使用的是memory pool,即内存池,相比较于第一级空间配置器,第二级空间配置器多了许多限制,主要是为了防止申请小额区块过多而造成内存碎片。当然小额区块在配置时实际上是对空间配置器效率的一种伤害。另外,索求任何一块内存,都得需要一些额外内存来进行标记,虽然这些标记占内 阅读全文
posted @ 2017-05-04 20:20 Forever-Road 阅读(600) 评论(0) 推荐(0) 编辑
摘要: 当operator new无法满足某一内存分配需求时,它会抛出异常。以前它会返回一个null指针,某些旧式编译器目前也还那么做。当operator new抛出异常以反映一个未获满足的内存需求之前,它会先调用一个客户指定的错误处理函数,一个所谓的 "new-handler",当然operator ne 阅读全文
posted @ 2017-05-04 19:15 Forever-Road 阅读(511) 评论(0) 推荐(0) 编辑
摘要: 在第一级配置器中,一开始就定义了内存分配出错的宏接口,如下: 先弄清楚第一级配置器如何工作,注意没有template型别参数,因为我们只是分配空间,并不进行对象的构造,至于非型别参数 "__inst" ,就没怎么派上用场,如下: 第一级配置器以 malloc()、free()、realloc()等 阅读全文
posted @ 2017-05-04 17:45 Forever-Road 阅读(1064) 评论(1) 推荐(0) 编辑
摘要: 在STL源代码中,对象构造前的空间配置和对象析构后的空间释放,由<stl_alloc.h>负责,SGI STL的空间配置器考虑到了多线程状态以及线程资源分配和线程切换、内存不足、内存堆区空间的申请、过多“小型区块”可能造成内存碎片(fragment)等一系列问题。 C++负责内存配置基本操作的是 : 阅读全文
posted @ 2017-05-04 16:19 Forever-Road 阅读(1488) 评论(0) 推荐(0) 编辑