STL原始碼剖析 分配器Allocators

2022-06-05 20:27:10 字數 997 閱讀 6713

new:指我們在c++裡通常用到的運算子

operator new():指對new的過載形式,它是乙個函式,並不是運算子

函式operator new中呼叫malloc()進行記憶體分配。

malloc實際記憶體分配得到的記憶體空間如下:

new 運算子執行過程:

呼叫operator new分配記憶體(可過載)

呼叫建構函式構造生成類物件

返回相應的指標

最重要的兩個函式:allocatedeallocate

//呼叫 operator new()

pointer allocator::allocate(size_type n, const void* = 0)

//呼叫 operator delete()

void allocato::deallocate(pointer p, size_type n)

不建議使用,效率不佳,只對c++的::operator new::operator delete做了簡單的包裝在stl實際使用中,並沒有使用allocator這個分配器。

注意:g4.9以後預設的分配器又變成了allocator;g4.9的__pool_alloc就是g2.9的alloc

16條鍊錶,每一條鍊錶負責不同大小的區塊。第0條負責8位元組大小,以8位元組大小增長

優點:減少記憶體分配時多餘空間的分配

《STL原始碼剖析》之分配器

對於分配器的要求,應滿足c 標準中的幾個函式 1.分配器應是乙個模板類,設型別為t 2.模板類物件應有public t allocate int n 功能,分配一段長為至少為n typesize的記憶體 原始,未構造 儲存n個型別為t的物件,返回指向分配記憶體頭部的t型別指標 3.應該有deallo...

STL的記憶體分配器

題記 記憶體管理一直是c c 程式的 關於記憶體管理的話題,大致有兩類側重點,一類是記憶體的正確使用,例如c 中new和delete應該成對出現,用raii技巧管理記憶體資源,auto ptr等方面,很多c c 書籍中都使用技巧的介紹。另一類是記憶體管理的實現,如linux核心的slab分配器,st...

STL的記憶體分配器

分類 c c stl 2011 04 04 18 34 1689人閱讀收藏 舉報list 演算法vector linux核心 byte raii 題記 記憶體管理一直是c c 程式的 關於記憶體管理的話題,大致有兩類側重點,一類是記憶體的正確使用,例如c 中new和delete應該成對出現,用rai...