首先介绍一下执行new后的函数调用关系:
new -> operator new -> malloc(CRT) -> 调用操作系统的内存分配API(Windows、Linux、Unix)
介绍:std::allocator是STL容器使用的内存配置器,也是标准库唯一预定义的内存配置器。每个容器内部都有一个allocator,用来完成内存配置与释放,对象构造和析构的工作。
特点:将内存分配和对象构造分离开来,它分配的内存是原始的、未构造的。
下面代码展示了STL中容器对allocator的使用
//STL对allocator的使用
template<class _Ty,class _A=allocator<_Ty>>
class vector{
_A data_allocator;
//...
}
template<class _Ty,class _A=allocator<_Ty>>
class list{
_A data_allocator;
//...
}
template<class _Ty,class _A=allocator<_Ty>>
class deque{
_A data_allocator;
//...
}
template<class _Ty,class _A=allocator<_Ty>>
class set{
_A data_allocator;
//...
}
allocator的实现allocator类及其算法(C++ Primer 第五版 p428)
下面代码展示了应用程序对allocator的使用,不建议这样使用
#include <memory>
#include <string>
#include <iostream>
int main()
{
const int n = 10;
std::allocator<std::string> alloc; //可以分配string的allocator对象
auto const p = alloc.allocate(n); //分配n个未初始化的string,直接使用会出现未定义的情况
auto q = p;
alloc.construct(q++); //构造1
alloc.construct(q++, 10, 'c'); //构造2
alloc.construct(q++, "hi"); //构造3
for (auto w = p; w != q; w++) { //输出
std::cout << *w << " " << std::endl;
}
while (q != p) { //对象析构
alloc.destroy(--q);
}
alloc.deallocate(p, n); //释放内存
return 0;
}