C 記憶體池的極簡版實現

2021-07-25 05:27:21 字數 969 閱讀 8037

當在乙個函式中需要大量使用new來申請臨時用的陣列或物件時,用完之後需要對每乙個new出來的陣列進行釋放,特別當乙個函式特別長的時候,(如在我廠的系統中,1000行的函式是經常的),要去找出之前寫的每乙個new然後寫對應的delete,這是極不美觀且易漏掉的,因此使用自己的記憶體管理方案是很有好處的:

1.程式設計師可以盡情地new,不用負責釋放

2.使用記憶體池一次性申請一大段連續的記憶體,之後都在這一段記憶體上工作,減少記憶體碎片和系統呼叫次數

3.程式執行過程中發生的缺頁次數應該會少一些

首先,定義buffer類:

[cpp]view plain

copy

using

namespace

std;  

class

buffer  

void

* get(

size_t

size)  

void

printsize()  

~buffer()  

};  

首先需要過載new輸入符,size_t引數是系統自動傳進去的,只需把申請的buffer指標傳入即可。在函式開始時,可以粗略估算一下大約需要多大的空間,構造差不多大的buffer就可以了,函式結束後buffer的析構被呼叫,整個buffer釋放的記憶體一起被釋放掉了:

[cpp]view plain

copy

void

run()  

void

* operator 

new (

size_t

size, buffer* buffer) 

//過載new操作符

void

* operator 

new(

size_t

size, buffer* buffer) 

//過載new操作符

C 記憶體池的極簡版實現

當在乙個函式中需要大量使用new來申請臨時用的陣列或物件時,用完之後需要對每乙個new出來的陣列進行釋放,特別當乙個函式特別長的時候,如在我廠的系統中,1000行的函式是經常的 要去找出之前寫的每乙個new然後寫對應的delete,這是極不美觀且易漏掉的,因此使用自己的記憶體管理方案是很有好處的 1...

極簡版shared ptr實現

程式如下 標頭檔案 ifndef pch h define pch h include includeusing namespace std class like shared ptr 接受指標的建構函式 like shared ptr string a location a number new ...

c 11 簡約版記憶體池實現

使用c 11的智慧型指標實現乙個簡約版的記憶體池 件 created by 李文龍 on 2019 12 1.ifndef thread tool test memory pool h define thread tool test memory pool h include common.h in...