記憶體池 高效實現

2021-06-28 04:06:16 字數 2853 閱讀 5935

記憶體池主要分為三個部分:class buffer_t,class bufferpool_t,class mempool_t

1.class mempool_t:記憶體開闢與釋放的介面,既可以通過記憶體池開闢釋放或者在超過記憶體池最大記憶體分配大小時,通過系統進行開闢與釋放。

2.class bufferpool_t:在mempool_t中申請的實際記憶體大小2^n(2^n<=最大記憶體分配大小)記憶體池)對應於乙個bufferpool_t,乙個bufferpool_t由list鍊錶來管理多個2^n大小的記憶體塊

3.class buffer_t:對實際記憶體塊進行管理與儲存。

話不多說,直接上源**。

class mempool_t:

#include "bufferpool_t.h"

class mempool_t

;

#include "stdafx.h"

#include "mempool_t.h"

mempool_t::mempool_t(void)

:max_alloc_size(1<<20)//1mb

mempool_t::~mempool_t(void)

}//設定記憶體分配物件的例項

mempool_t * mempool_t::get_instance()

void * mempool_t::alloc( uint32_t size_ )

else

buf =(void*) bufferpool->alloc_buffer ();

} else

return buf;

}bool mempool_t::free( void* ptr )

bufferpool = it->second;

return bufferpool->free_buffer ((char*)ptr);;

} else

return false;

}bool mempool_t::internal_free( void* ptr_)

} return false;

}bool mempool_t::get_bufferpool_size( uint32_t size_, uint32_t &buf_size_ )

/*求整數的最接近2的冪,

向上對齊

*/size_ = size_ - 1;

size_ = size_ | (size_ >> 1);

size_ = size_ | (size_ >> 2);

size_ = size_ | (size_ >> 4);

size_ = size_ | (size_ >> 8);

size_ = size_ | (size_ >>16);

size_ = size_ + 1;

/*判斷是否是2的冪*/

if(0 != (size_&(size_-1)))

buf_size_ = size_;

return true;

}void * mempool_t::internal_malloc( const uint32_t &size_ )

void mempool_t::config( const uint32_t &max_buffer_size_ )

classbufferpool_t:

#include "buffer_t.hpp"

class bufferpool_t

;

#include "stdafx.h"

#include "bufferpool_t.h"

bufferpool_t::bufferpool_t(const uint32_t &buffer_size_,const uint32_t &limit_size_)

bufferpool_t::~bufferpool_t(void)

}char * bufferpool_t::alloc_buffer()

else

++alloc_times ;

buf = buffer->buf ();

buffer->use (true);

return buf;

}bool bufferpool_t::free_buffer( char * buffer_)

else

}return false;

}bool bufferpool_t::get_buffer_size( char *buffer_ ,uint32_t &buffer_size_)

else

}

class buffer_t

#pragma once

#include "stddef.hpp"

class buffer_t

inline void relase_buffer(void)

inline bool check_code()

inline char *buf()

inline uint32_t length()

inline bool use()

inline void use(const bool &is_use_)

private:

char *buf_data;

bool is_use;

uint32_t buf_code;

uint32_t buf_length;

};

寫的不好的地方,請指出

記憶體池實現

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

C 中乙個高效的記憶體池實現

原文出處 在高效c 程式設計中看到乙個不錯的記憶體池實現方案,這裡共享下,大家看看有什麼不足。很簡單,如下 template class cmemorypool cmemorypool unsigned int nitemcount expansion size cmemorypool void a...

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

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