看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类模板,它定义了最简单的内存分配模型,并且与值无关。
我想这与内存管理有关。但是,我不知道如何使用它。
关于此的任何指示?
答案 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
的示例