存储分配器 - 它是什么?

时间:2013-02-27 15:23:05

标签: c++ memory

我知道C和C ++中的存储类(静态,外部,自动,寄存器,C ++也增加了可变性和一些特定于编译器的存储类)但我无法弄清楚什么是存储分配器是。我不认为它是指在STL上可实现的内存分配器,简单来说是什么?

2 个答案:

答案 0 :(得分:5)

operator newoperator delete背后的任何内容(不要与new运算符和delete运算符混淆)。 operator new从免费存储分配内存,operator delete释放先前由operator new分配的内存,以便可能重用。当代码执行foo *ptr = new foonew运算符)时,编译器会生成调用operator new以获取正确数量的存储字节的代码,然后调用foo的构造函数。当代码执行delete ptrdelete运算符)时,编译器会调用foo的析构函数,然后调用operator delete来释放内存。

请注意,这就是C ++ 03标准中使用该术语的方式。在C ++ 11标准中,用于引用标准分配器。

答案 1 :(得分:5)

在C ++标准中,该术语用于指代STL样式容器使用的分配器类 - std::allocator或满足C ++ 11 17.6要求的用户定义自定义分配器1.3.5。

但是,它不是一个正式定义的术语,并且一旦引用免费商店的实现 - 也就是由new分配的动态存储,也会出现。

[注意:我指的是当前的(2011)语言规范。正如评论中所述,规范的历史版本显然只使用术语(非正式地)来指代免费商店]