[英]Does STL Vector use 'new' and 'delete' for memory allocation by default?
我正在為應用程序創建一個插件,其中應該由應用程序分配內存並跟蹤它。 因此,應該以緩沖區的形式從宿主應用程序獲取內存句柄,然后將它們返回給應用程序。 現在,我正計划使用STL Vectors,我想知道它在內部使用什么樣的內存分配。
它是否在內部使用“新”和“刪除”功能? 如果是這樣,我可以用自己的函數重載'new'和'delete'嗎? 或者我應該創建自己的模板分配器,這對我來說看起來很困難,因為我沒有創建自定義模板的經驗。
歡迎任何建議/示例代碼。 可以從這樣的應用程序中獲取內存句柄
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
都不需要調用它一次。
所以,是的,如果你替換全局運算符new,那么vector
將使用它,雖然不一定真正允許你的實現“高效”地管理內存。 原則上,你想要使用的任何特殊技巧都可以通過std::allocator
以10MB塊和子std::allocator
獲取內存而完全無關。
如果您有一個特定的實現,您可以查看其vector
行為,如果您的計划分配策略本質上是特定於平台的,那么這可能就足夠了。
std::vector
使用unitialized_*
函數從原始內存構造其元素(使用placement new)。 它使用創建的任何分配器來分配存儲,並且默認情況下,分配器直接使用::operator new(size_t)
和::operator delete(void *p)
(即,不是特定於類型的operator new
)。
從這篇文章中,“分配器的概念最初是為了提供不同內存模型的抽象來處理在某些16位操作系統上具有不同指針類型的問題(例如近,遠等等)”。 。
“該標准提供了一個內部使用全局運算符'new'和'delete'的分配器”
作者還指出了alocator界面並不那么可怕。 正如Neil Buchanan所說,“親自嘗試吧!”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.