原文:
最近在學習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,系統可能需要合併空閒記...