記憶體池的C 實現。

2021-06-25 23:42:46 字數 2148 閱讀 4344

原文:

最近在學習c++程式效能優化,讀到記憶體池部分。自己動手寫了乙個,小小測試了一下應該沒有問題。

記憶體塊memoryblock宣告檔案

[cpp]view plain

copy

#pragma once

#define ushort unsigned short

#define ulong unsigned long

#include 

using

namespace

std;  

//記憶體塊

struct

memoryblock  

void

operator 

delete

(void

* del,

size_t

)    

memoryblock(const

ushort

& sum,

const

ushort

& unit_size)  

:m_nsize(sum*unit_size),m_nfree(sum-1),m_nfirst(1),m_pnext(0)  

}  ~memoryblock(){}  

};  

記憶體池memorypool宣告檔案

[cpp]view plain

copy

#pragma once

#include "memoryblock.h"

//記憶體池 a very good memory manager

class

memorypool  

;  

記憶體池memorypool實現檔案

[cpp]view plain

copy

#include "memorypool.h"

const

ushort

mempool_alignment=2;  

memorypool::memorypool(const

ushort

&unit_size, 

const

ushort

&init_size, 

const

ushort

&grow_size)  

:m_pfirst(0),  

m_ninitsize(init_size),  

m_ngrowsize(grow_size)  

else

if(unit_size>=2)  

m_nunitsize=4;  

else

m_nunitsize=2;  

}  void

* memorypool::alloc()  

memoryblock* pmb_block=m_pfirst;  

while

(pmb_block&&pmb_block->m_nfree==0)

//pmb_block沒走到最後並且當前block沒有可分配結點

if(pmb_block)

//如果找到可分配結點的block

else

//如果找不到,此時pmb_block值為0

}  void

memorypool::free(

void

* pfree)  

pmb_block->m_nfree++;//可分配數目+1

*((ushort

*)pfree)=pmb_block->m_nfirst;  

pmb_block->m_nfirst=(ushort

)((ulong

)pfree-(

ulong

)pmb_block->m_data)/m_nunitsize;  

if(pmb_block->m_nfree*m_nunitsize==pmb_block->m_nsize)

//如何該鏈塊為空

}  memorypool::~memorypool(void

)    

void

memorypool::freememoryblock(memoryblock *pblock)  

C 記憶體池的實現

file memorypool.h note hangzhou hikvision system technology co.ltd.all right reserved.brief windows下記憶體池的實現 author zhangpeng nj 163.com date 11 15 201...

C 記憶體池的實現

記憶體池是一種自主的記憶體管理機制。就是將我們的記憶體管理放在了應用程式端。那麼它的簡單處理做了什麼事呢?首先,我們從堆上分配出一塊很大的記憶體塊。接著我們按照劃分將其劃分成每個不同的小組。這個每個小組儲存乙個資料塊。針對於每個小組的組內來說就是乙個簡單的資料結構。這個資料結構我們將其分為兩個部分,...

記憶體池 C 記憶體池

c c 下記憶體管理是讓幾乎每乙個程式設計師頭疼的問題,分配足夠的記憶體 追蹤記憶體的分配 在不需要的時候釋放記憶體 這個任務相當複雜。1.呼叫malloc new,系統需要根據 最先匹配 最優匹配 或其他演算法在記憶體空閒塊表中查詢一塊空閒記憶體,呼叫free delete,系統可能需要合併空閒記...