gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-28 23:33:46 27 4
gpt4 key购买 nike

我正在为应用程序开发一个插件,其中的内存应该由应用程序分配并跟踪它。因此,应该以缓冲区的形式从主机应用程序获取内存句柄,然后将它们返回给应用程序。现在,我正计划使用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com