请你来介绍一下STL的allocaotr?

发布于 2020-01-05 14:44:57
关注者
0
被浏览
1571
1 个回答
  • 面试哥
    面试哥 2020-01-05
    为面试而生,有面试问题,就找面试哥。

    STL的分配器用于封装STL容器在内存管理上的底层细节。在C++中,其内存配置和释放如下:

    new运算分两个阶段:(1)调用::operator new配置内存;(2)调用对象构造函数构造对象内容

    delete运算分两个阶段:(1)调用对象希构函数;(2)掉员工::operator delete释放内存

    为了精密分工,STL allocator将两个阶段操作区分开来:内存配置有alloc::allocate()负责,内存释放由alloc::deallocate()负责;对象构造由::construct()负责,对象析构由::destroy()负责。

    同时为了提升内存管理的效率,减少申请小内存造成的内存碎片问题,SGI STL采用了两级配置器,当分配的空间大小超过128B时,会使用第一级空间配置器;当分配的空间大小小于128B时,将使用第二级空间配置器。第一级空间配置器直接使用malloc()、realloc()、free()函数进行内存空间的分配和释放,而第二级空间配置器采用了内存池技术,通过空闲链表来管理内存。

推荐阅读
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看