c++ - STL Vector是否默认使用 'new'和 'delete'进行内存分配?

标签 c++ memory stl vector allocation

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

它是否在内部使用"new"和“删除”功能?如果是这样,我可以用自己的函数重载"new"和“删除”吗?或者我应该创建自己的模板分配器,这对我来说似乎是一项艰巨的工作,因为我在创建自定义模板方面没有那么丰富的经验。

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

void* bufferH = NULL;

bufferH = MemReg()->New_Mem_Handle(size_of_buffer);
MemReg()->Dispose_Mem_Handle(bufferH); //Dispose it

最佳答案

vector默认使用std::allocatorstd::allocator需要使用全局运算符new(即::operator new(size_t)) 获取内存(20.4.1.1)。但是,不需要每次调用 allocator::allocate 时只调用一次。

所以是的,如果您替换 global operator new 那么 vector 将使用它,尽管不一定以真正允许您的实现“有效”管理内存的方式。原则上,您想使用的任何特殊技巧都可以通过 std::allocator 以 10MB block 获取内存并进行子分配完全无关紧要。

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

关于c++ - STL Vector是否默认使用 'new'和 'delete'进行内存分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4159641/

相关文章:

c++ - 什么是内存碎片?

c++ - 为什么在 STL 映射中用作值的类需要在...中有一个默认构造函数?

c++ - 返回指向 const 对象的 const 共享指针的 const vector

c++ - 多线程和模板化单例竞争条件

二维字符串数组的 C 内存布局

c++ - 将无符号字符转换为红黑树的有符号字符

linux -/proc/self/maps 使用 fwrite 坏地址错误将内存写入文件

c++ - 如何使用 STL 从容器集中删除自定义对象?

c++ - 如何分析 C/C++ 应用程序中内存访问所花费的时间?

java - 在 JNA 中分配 WinDef.RECT 结构