10

在阅读有关 C++ 和标准库的书籍时,我经常看到对分配器的引用。

例如,Nicolai Josuttis 的C++ 标准库在上一章详细讨论了它们,Scott Meyers 的第 10 条(“注意分配器的约定和限制”)和第 11 条(“了解自定义分配器的合法用途”)有效的 STL是关于它们的使用。

我的问题是,分配器如何表示特殊的内存模型?默认的 STL 内存管理还不够吗?什么时候应该使用分配器?

如果可能,请用一个简单的内存模型示例进行说明。

4

1 回答 1

12

分配器抽象分配原始内存,并在该内存中构造/销毁对象。

在大多数情况下,默认分配器非常好。但是,在某些情况下,您可以通过将其替换为其他东西来提高效率。经典示例是当您需要/想要分配大量非常小的对象时。例如,考虑一个可能只有十几个字节左右的字符串向量。正常的分配器使用operator new,这可能会为这些小对象带来相当高的开销。创建一个自定义分配器来分配更大的内存块,然后根据需要对其进行细分,可以节省相当多的内存和时间。

于 2013-07-25T03:26:29.860 回答