(六)記憶體分配器

2021-09-19 12:58:59 字數 1184 閱讀 3905

c++的stl中定義了很多容器,容器的第二個模板引數通常為allocator型別。標準庫中allocator類定義在標頭檔案memory中,用於幫助將記憶體分配和物件的構造分離開來。它分配的記憶體是原始的、未構造的。

allocatoralloc;  定義了乙個可以分配string的allocator物件

auto const p=alloc.allocate(n); //分配n個未初始化的string記憶體,即為n個空string分配了記憶體,當然正如上面所說,分配的記憶體是原始的,未構造的。

allocatora;   //定義了乙個名為a的allocator物件,它可以為型別t的物件分配記憶體

a.allocator(n);   //分配一段原始的、未構造的記憶體,這段記憶體能儲存n個型別為t的物件

a.deallocate(p,n);  

//釋放t*指標p位址開始的記憶體,這塊記憶體儲存了n個型別為t的物件,

//p必須是乙個先前由allocate返回的指標,且n必須是p建立時所要求的大小,且在呼叫該函式之前必須銷毀在這片記憶體上建立的物件。

//要求還蠻多的哈,這是因為在建立過程中我們分配的是最原始的記憶體,所以在釋放記憶體時也是只能嚴格釋放這片最原始的記憶體。

a.construct(p,args);

//p必須是乙個型別為t* 的指標,指向一片原始記憶體,arg將被傳遞給型別為t的建構函式,用來在p指向的原始記憶體上構建物件。

a.destory(p);  //p為t*型別的指標,用於對p指向的物件執行析構函式

使用步驟:

由於allocator將記憶體空間的分配和物件的構建分離,故使用allocator分為以下幾步

與類繫結,因為allocator是乙個泛型類

申請指定大小空間

構建物件,其引數為可變引數,所以可以選擇匹配的建構函式

//4.使用,與其它指標使用無異

析構物件,此時空間還是可以使用

**空間

例子

#include using namespace std;

int main()

alloc.deallocate(p, n); //摧毀記憶體空間

return 0;

}

記憶體分配 定長記憶體分配器

在各種記憶體分配演算法中,有一種很實用,實現起來也簡單 定長的記憶體分配器。即每次分配的記憶體大小是固定的。大概邏輯是 在一些區域性的單執行緒邏輯中,可以有效提高效率。很短,很容易看懂 fallocator.h pragma once 固定長度的記憶體分配器 include include incl...

記憶體分配器一

glibc記憶體管理學習 x86平台linux程序記憶體布局 text elf格式程式 data 程式執行時就能確定的資料,可讀可寫 bss 沒有初始化的全域性變數和靜態表裡 heap stack 由編譯器自動分配釋放,存放函式引數 區域性變數等 mmap 對映區域 實現乙個malloc 分頁與位址...

Halloc記憶體分配器

max nsbs 8192 預設的最大superblocks數量 sb set sz max nsbs word sz superblock set的大小,每個set32個superblcoks free mem g 裝置上釋放的總記憶體 max alloc mem g 可以被分配的最大記憶體 to...