我知道C和C++中的存储类(静态,外部,自动,寄存器,C++也增加了可变性和一些特定于编译器的存储类),但我无法弄清楚存储分配器是什么.我不认为它是指在STL上可实现的内存分配器,简单来说是什么?
这一切的背后,是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标准中,它也用于指代标准分配器.
在C++标准中,该术语用于指代STL样式容器使用的分配器类 - 或者std::allocator是满足C++ 11 17.6.3.5给出的要求的用户定义的自定义分配器.
但是,它不是一个正式定义的术语,并且一旦引用了免费存储的实现 - 也就是由分配的动态存储而出现new.
[注意:我指的是当前的(2011)语言规范.如评论中所述,规范的历史版本显然仅使用术语(非正式地)来指代免费商店]