存储分配器 - 它是什么?

Joh*_*ing 6 c++ memory

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

Pet*_*ker 5

这一切的背后,是operator newoperator 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标准中,它用于指代标准分配器.


Mik*_*our 5

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

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

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

  • 嗯,它没有"正式"定义,因为没有任何内容说"存储分配器意味着......".但是,它在使用时已经非常明确地定义:"通用实用程序库(第20章)包括其他库元素使用的组件,例如用于动态存储管理的预定义**存储分配器**(3.7.4)"(强调补充).3.7.4讨论了`operator new`和`operator delete`,**不是**分配器. (2认同)