我知道C和C ++中的存储类(静态,外部,自动,寄存器,C ++也增加了可变性和一些特定于编译器的存储类)但我无法弄清楚什么是存储分配器是。我不认为它是指在STL上可实现的内存分配器,简单来说是什么?
答案 0 :(得分:5)
operator new
和operator delete
背后的任何内容(不要与new
运算符和delete
运算符混淆)。 operator new
从免费存储分配内存,operator delete
释放先前由operator new
分配的内存,以便可能重用。当代码执行foo *ptr = new foo
(new
运算符)时,编译器会生成调用operator new
以获取正确数量的存储字节的代码,然后调用foo
的构造函数。当代码执行delete ptr
(delete
运算符)时,编译器会调用foo
的析构函数,然后调用operator delete
来释放内存。
请注意,这就是C ++ 03标准中使用该术语的方式。在C ++ 11标准中,也用于引用标准分配器。
答案 1 :(得分:5)
在C ++标准中,该术语用于指代STL样式容器使用的分配器类 - std::allocator
或满足C ++ 11 17.6要求的用户定义自定义分配器1.3.5。
但是,它不是一个正式定义的术语,并且一旦引用免费商店的实现 - 也就是由new
分配的动态存储,也会出现。
[注意:我指的是当前的(2011)语言规范。正如评论中所述,规范的历史版本显然只使用术语(非正式地)来指代免费商店]