我正在为应用程序开发一个插件,其中的内存应该由应用程序分配并跟踪它。因此,应该以缓冲区的形式从主机应用程序获取内存句柄,然后将它们返回给应用程序。现在,我正计划使用 STL Vectors,我想知道它在内部使用了什么样的内存分配。
它是否在内部使用"new"和“删除”功能?如果是这样,我可以用自己的函数重载"new"和“删除”吗?或者我应该创建自己的模板分配器,这对我来说似乎是一项艰巨的工作,因为我在创建自定义模板方面没有那么丰富的经验。
欢迎任何建议/示例代码。可以像这样从应用程序中获取内存句柄
void* bufferH = NULL;
bufferH = MemReg()->New_Mem_Handle(size_of_buffer);
MemReg()->Dispose_Mem_Handle(bufferH); //Dispose it
最佳答案
vector
默认使用std::allocator
,std::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/