10

看着vector,我意识到我在创建向量时从未使用过第二个参数。

std::vector<int> myInts; // this is what I usually do
std::vector<int, ???> myOtherInts; // but is there a second argument there?

查看上面的链接,它说它是为了:

要使用的分配器对象,而不是构造一个新对象。

或者,至于这个

分配器:用于定义存储分配模型的分配器对象的类型。默认情况下,使用类型 T 的分配器类模板,它定义了最简单的内存分配模型,并且与值无关。

我想这与内存管理有关。但是,我不确定如何使用它。

关于这个的任何指示?

4

5 回答 5

4

默认分配器 ,std::allocator<>将处理由std::vector<>(和其他人)进行的所有分配。每次需要新的分配时,它都会从堆中进行新的分配。

通过提供自定义分配器,您可以例如预先分配一大块内存,然后在需要单独分配时将其分割并分发较小的部分。这将显着提高分配速度,例如在游戏中这很好,但与默认分配器相比会增加复杂性。

某些std类型的实现具有用于少量数据的内部基于堆栈的存储。例如,std::basic_string<>可能使用所谓的小字符串优化,其中只有长度超过某个固定长度的字符串,比如 16 个字符(只是一个示例!),从分配器获取分配,否则使用内部数组。

于 2010-12-14T08:11:11.767 回答
2

一般情况下很少使用自定义分配器。它们可能有用的一些示例:

  • 针对特定分配模式的优化。例如,并发程序可以在任务执行开始时通过标准方式预先分配一大块内存,然后在不阻塞全局堆互斥体的情况下将其削减。当任务完成时,整个内存块可以被释放。要将此技术用于 STL 容器,可以使用自定义分配器。

  • 嵌入式软件,其中设备具有具有不同属性(缓存/非缓存、快速/慢速、易失性/持久性等)的多个内存范围。自定义分配器可用于将存储在 STL 容器中的对象放置在特定内存区域中。

于 2010-12-14T08:13:11.733 回答
1

也许这会有所帮助: http: //www.codeguru.com/cpp/cpp/cpp_mfc/stl/article.php/c4079

您可以尝试谷歌:stl allocator

于 2010-12-14T08:08:20.917 回答
1

分配器 (STL)可帮助您管理向量类中对象的内存。您可以将自定义分配器用于不同的内存模型(等)。

于 2010-12-14T08:12:04.317 回答
0

您好,您可以找到自定义分配器的示例http://www.codeproject.com/KB/cpp/allocator.aspx

于 2010-12-14T08:07:58.347 回答