STL Vector默认使用'new'和'delete'进行内存分配吗?

rwb*_*rwb 9 c++ memory stl allocation vector

我正在为应用程序创建一个插件,其中应该由应用程序分配内存并跟踪它.因此,应该以缓冲区的形式从宿主应用程序获取内存句柄,然后将它们返回给应用程序.现在,我正计划使用STL Vectors,我想知道它在内部使用什么样的内存分配.

它是否在内部使用"新"和"删除"功能?如果是这样,我可以用自己的函数重载'new'和'delete'吗?或者我应该创建自己的模板分配器,这对我来说看起来很困难,因为我没有创建自定义模板的经验.

欢迎任何建议/示例代码.可以从这样的应用程序中获取内存句柄

void* bufferH = NULL;

bufferH = MemReg()->New_Mem_Handle(size_of_buffer);
MemReg()->Dispose_Mem_Handle(bufferH); //Dispose it
Run Code Online (Sandbox Code Playgroud)

Ste*_*sop 18

vectorstd::allocator默认使用,并且std::allocator需要使用全局运算符new(即::operator new(size_t))来获取内存(20.4.1.1).但是,每次调用时都不需要调用它一次allocator::allocate.

所以,是的,如果你替换全局operator new,那么vector将使用它,虽然不一定真正允许你的实现"高效"地管理内存.原则上,你想要使用的任何特殊技巧都可以通过std::allocator以10MB块和子分配方式获取内存来完全无关.

如果您有一个特定的实现,您可以查看它的vector行为方式,如果您的计划分配策略本质上是特定于平台的,那么这可能就足够了.


Ste*_*end 6

STL容器使用在构造时给出的分配器,使用operator new和的默认分配器operator delete.

如果您发现默认值不适合您,则可以提供符合容器要求的自定义分配器.这里引用了一些现实世界的例子.

我会首先使用默认值测量性能,并且仅在您确实需要时进行优化.分配器抽象为您提供了一种相对简洁的微调方式,无需重新设计.你如何使用它vector可能比底层分配器具有更多的性能影响(reserve()提前,避免在元素范围的中间插入和删除,有效地处理元素的复制构造 - 标准警告).