存储分配器——它是什么?

Storage allocator - what is it?

本文关键字:它是什么 存储 分配器      更新时间:2023-10-16

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

这是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标准中,也是用来指代标准分配器。

在c++标准中,该术语用于指stl风格容器使用的分配器类——std::allocator或用户定义的满足c++ 11 17.6.3.5要求的自定义分配器。

然而,它不是一个正式定义的术语,并且也出现过一次,指的是自由存储的实现-即new分配的动态存储。

[注:我指的是当前(2011)的语言规范。正如在注释中所指出的,规范的历史版本显然只是(非正式地)使用这个术语来指代自由存储]