std :: vector的第二个参数

时间:2010-12-14 08:02:52

标签: c++ vector allocator

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

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

查看上面的链接,它表示它适用于:

  

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

或者,对于this one

  

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

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

关于此的任何指示?

5 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:2)

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

  • 特定分配模式的优化。例如,并发程序可以在任务执行开始时通过标准方法预分配大块内存,然后在不阻塞全局堆互斥锁的情况下从其中删除分段。任务完成后,可以处理整个内存块。要将此技术用于STL容器,可以使用自定义分配器。

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

答案 2 :(得分:1)

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

您可以尝试使用google: stl allocator

答案 3 :(得分:1)

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

答案 4 :(得分:0)

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

的示例