本文共 774 字,大约阅读时间需要 2 分钟。
分配器为为容器再内存中分配空间。容器的一般默认分配器是 std::allocator ,该分配器是一个类模板。
对内存空间分配的动作(分配器,new,operator new()等)一般最后都会调用malloc() 。malloc() 再根据不同的操作系统调用其底层的API。同理释放内存对应的free()。
分配器一般含有两个重要的函数allocate() 和deallocate()。用于分配和释放内存。
std::allocator的allocate() 调用operator new() ,而operator new() 又调用malloc() 。deallocate() 调用operator delete() ,operator delete()再调用free()。并没有做其余优化。它对容器中每一个元素都调用一次malloc()。每次malloc(size)一块较大的内存,再将其切割成许多大小不同的小块给容器中每个元素使用,减少malloc() 次数,从而降低额外开销(额外开销只在malloc()时产生)
其为容器内每一个元素分配内存最终都要调用malloc()。
(为什么不用alloc了?可能有缺陷?) GNU4.9中之前的alloc还在,被改名为__pool_alloc。使用方法:vector<int, __gnu_cxx::__pool_alloc > v; 转载地址:http://jyeci.baihongyu.com/