常用記憶體池的實現 mem c

2021-04-24 07:56:32 字數 1349 閱讀 4046

/***

*/#include "mem.h"

mem_pool g_stmempool;

/***************************begin of memory pool section********************************/

/* @x : size of memory block (32 /64 /.../256....)

* @tpblk: ptr to mem_blk used as temporary storage

*/#define mempool_alloc(x, tpblk) bucket_alloc(&(g_stmempool.m_bucket##x), tpblk)

/* @x : size of memory block (32 /64 /.../256....)

* @pdata : ptr to data member of struct _memblk

*/#define mempool_free(x, pdata) bucket_free(&(g_stmempool.m_bucket##x), pdata)

/* @x : size of memory block (32 /64 /.../256....)

* @n : number of malloced memory blocks

*/#define mempool_init(x, n)

/* * @x : size of memory block (32 /64 /.../256....)

*/#define mempool_cleanup(x) bucket_cleanup(&(g_stmempool.m_bucket##x))

/*initialize the memory pool, should be called first*/

ulong mempoolinit()

/*finalize*/

void mempoolcleanup()

/*exported inte***ce to allocate memory*/

void *memalloc(ulong ulsize)

sem_unlock(&g_stmempool.sem);

return p;

}/*exported inte***ce to free memory*/

void memfree(void *p)

sem_unlock(&g_stmempool.sem);

return;

}/***************************end of memory pool section********************************/

記憶體池 簡單的記憶體池的實現

當頻繁地用malloc申請記憶體,然後再用free釋放記憶體時,會存在兩個主要問題。第乙個問題是頻繁的分配釋放記憶體可能導致系統記憶體碎片過多 第二個問題是分配釋放記憶體花費的時間可能比較多 這個問題不太明顯 這個時候我們就可以考慮使用記憶體池了。最樸素的記憶體池思想就是,首先你向系統申請一塊很大的...

記憶體池實現

記憶體池實現 話說一直想找乙個別人寫好的使用,可惜沒什麼人會拿這小東西發布,只好自寫乙個。1.多級鍊錶分配池 我不知道這種設計的具體學名是什麼,這部分的內容也許你去看 stl原始碼分析 的有關章節更合適一些,這裡我只能用我粗陋的語言描述一下。記憶體池,完全可以從字面上理解為從池子裡申請記憶體,釋放的...

簡易記憶體池(物件池)的實現

pragma once include include include 物件池的實現 針對於乙個知道型別的物件 我們通過物件池 來比較普通向記憶體中申請空間 和我們直接向我們的記憶體池中申請空間的效能對比 template class t,size t initnum 10000 設定記憶體池中取出...