記憶體池的簡單試驗(C )

2021-04-19 06:35:03 字數 2245 閱讀 1821

記憶體池的簡單試驗(c++)

這是試驗性的程式, 雖然演算法實現簡弱, 當在編譯器優化後實驗結果,

效能比用全域性new delete的記憶體管理好了很多,我這裡有考慮到多執行緒

看來在大量使用記憶體分配的程式,用記憶體池是能夠顯著提高效能的;

有時間我會改進演算法,有高手看到, 請指點一二, 我是非專業的, 演算法方面很弱;

還有陣列的記憶體分配遇到了一些問題;

以下陣列的記憶體分配的一般模式

void * operator new(size_t size);

void operator delete(void *p, size_t size);

可惜的是new裡的size和delete你的size在vc, bc下並不匹配(g++則一樣, 比較好);

這是的分配陣列是需要儲存指標及對應的大小(一般用hash), 這要消耗不少時間;

#pragma warning(disable: 4530)

#pragma warning(disable: 4786)

#include

#include

#include

#include

#include

#include

#include

using namespace std;

#include

template

class memorypool;};

struct lock

~lock()         };

char _buffer[preallocsize];

char *_begin, *_end;

critical_section _cslock;

list_memorylist;

void createlist()

void freelist()

void *ffa_alloc(size_t size)// first fit algorithm

else}}

return p;}

bool ffa_free(char *p, size_t size)

else

else  //just union pre_node

(*temp_iter)->_size += size;

}else

}return true;

}//  if(p < (*iter)->_begin)

}  //for

if(_memorylist.size() == 0) // null list

_memorylist.insert(_memorylist.end(), new memoryblock(p, size));

else  //push back of list

return true;}

void *bfa_alloc(size_t size)// best fit algorithm

bool bfa_free(char *p, size_t size)

void *wfa_alloc(size_t size)// worst fit algorithm

bool wfa_free(char *p, size_t size)

public:

memorypool()// : _memoryhash(preallocsize / 16)

~memorypool()

void *alloc(size_t size)

void free(void *address, int size)}

void printlist()

list< memorypool::memoryblock * >::iterator iter;

for(i = 0, iter = _memorylist.begin(); iter != _memorylist.end(); iter ++, i ++)

printf("%d : address %p offset %d, size %d;/n",

i, (*iter)->_address, (*iter)->_address - _begin, (*iter)->_size);}};

class object

;void operator delete(void * p, size_t size);};

memorypool<2 * 1024 * 1024> object::_mp;

int main(int argc, char* argv)

記憶體池的簡單試驗(C )

2008 02 28 16 08 202人閱讀收藏 舉報 這是試驗性的程式,雖然演算法實現簡弱,當在編譯器優化後實驗結果,效能比用全域性new delete的記憶體管理好了很多,我這裡有考慮到多執行緒 看來在大量使用記憶體分配的程式,用記憶體池是能夠顯著提高效能的 有時間我會改進演算法,有高手看到,...

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

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

記憶體池 C 記憶體池

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