使用內存池進行性能優化

作算法的時候常常會直接接觸底層數據結構,並對它們又更高的可靠性和性能要求。

就像我常說的: Never Repeat Yourself,你永遠不可能短期寫出別人久經考驗的代碼。
因此在GitHub上找了一下這個用C++ 模板實現的內存池項目。git

若是有興趣探究內存池的實現方式和結構,請看http://www.codeproject.com/Articles/15527/C-Memory-Poolgithub

在這裏我放上本身Fork的源碼Git
https://github.com/ImNaohaing/MemoryPool算法

固然內存池是一種模型而已,具體實現靠的是C++標準庫)sgi(Silicon Graphics Computer System,Inc) 版本)中引入的內存配置器(allocator)實現的.數據結構

套官網上的一句話: 這場革命來的太晚

C++官方wiki對內存配置器的描述http://cplusplus.wikidot.com/cn:allocator
這是分別使用STL默認配置器,做者寫的Memory Pool 和 STL::Vector(最經常使用)的性能比較:
o_memory_pool.PNG
o_memory_pool_output.PNG性能

測試文件在項目中
測試




test.cpp
測試內容大意爲:
用內存分配器以 250000次/循環
向數據結構(默認堆,Memory Pool,std::vector)中添加並刪除 int值

Results:

  • 能夠看到官方的默認實現中內存佔用及其不穩定
  • 而Memory Pool事先分配好了內存就很穩定(執行速度也快了)
  • 最差的是std::vector,它執行添加和刪除速度很慢,由於vector在增長項目的時候申請內存(malloc),但在刪除時不從新劃份內存(realloc)而是直接保留,因此雖然執行速度慢,但內存狀態相對穩定。
相關文章
相關標籤/搜索