當在乙個函式中需要大量使用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...