C 記憶體管理 之 初識allocator

2021-05-21 14:02:15 字數 1504 閱讀 1632

allacator中文稱為「記憶體配置器」,通常它是乙個類,負責提供記憶體管理(可能包含記憶體分配、釋放、自動**等能力)相關的服務。例如,我們通過c提供的malloc/free即刻提供乙個allocator實作出來:

class

******alloc

//注意這裡有看似多餘的引數cb,這完全是為了和後續提供的allocator規格一致的需要。

void

free(

void

*data, size_t cb)};

有了allocator,我們可以申請記憶體了,但是我們還不能用它建立乙個c++物件。為了方便建立c++物件,我們提供了輔助的new操作,原型大體如下:

template 

<

class

type, 

class

alloctype

>

type

*new(alloctype

&alloc);                    

//類似於new type

template 

<

class

type, 

class

argtype1, 

class

alloctype

>

type

*new(argtype1 arg1, alloctype

&alloc); 

//類似於new type(arg1)

template 

<

class

type, 

class

alloctype

>

type

*newarray(size_t count, alloctype

&alloc);

//類似於new type[count]

有了這些輔助函式,我們就可以建立物件了。使用樣例:

******alloc alloc;

int*

intarray 

=newarray

<

int>

(count, alloc);

myclass

*obj 

=new

<

myclass

>

(alloc);

myclass

*objwitharg 

=new

<

myclass

>

(arg1, alloc);

myclass

*objarray 

=newarray

<

myclass

>

(count, alloc);

這裡我們雖然使用******alloc建立物件,但是需要提醒的是,這些new操作對所有的allocator有效。如果你關心new函式的**,先不急,下面我們馬上就可以看到了。但是首先我們要繼續討論一下allocator。

c 之初識模板

模板 函式模板和類模板 一 函式模板 1 概念 函式模板代表了乙個家族,在使用時被引數化,根據實參型別產生函式的特定型別模板。2 函式模板格式 template.typename tn 返回值型別 函式名 引數列表 template void swap t left,t right 注意 typen...

C和指標之初識篇

一 基礎細節 1.程式從標準輸入中讀取輸入行並在標準輸出中列印這些輸入行 首先讀取一串列標號,每一行的列標號從0 開始,以乙個負數作為結束標誌,列標號都是成對出現,表示讀取列的範圍。輸入如下 3 7 8 15 1 輸出第3 7列,8 15列qwertyuiopasdfghjkl i love you...

C語言學習筆記之初識

初識c語言 一 計算機和程式語言 1 初學者在學習c的時候,不僅會為語言本身的複雜而困惑,而且對其程式設計工具的選擇同樣困擾。因為c語言出現的時間很早,而且在這麼多年中也沒有乙個主要的組織對其程式設計工具進行統一的維護,所以導致眾多程式設計工具各有語法差異。在程式設計軟體的選擇上建議 選擇windo...