伺服器開發 學習筆記 記憶體管理(記憶體池實現)

2021-09-26 00:26:22 字數 2898 閱讀 5526

一、新建空的控制台專案 命名為hellomemory,新增標頭檔案walloc.h(還有乙個檔案walloc.cpp)、memorymgr.hpp

walloc.h**

#ifndef _walloc_h_

#define _walloc_h_

void* operator new (size_t size);

void operator delete(void *p);

void* operator new(size_t size);

void operator delete(void *p);

void* wmallocmem(size_t size);

void wfreemem(void *p);

#endif//

memorymgr.hpp**

#ifndef _memorymgr_hpp_

#define _memorymgr_hpp_

#define _max_memorysize_ 1024

#include #include #ifdef _debug

#include #define xprintf(...) printf(__va_args__)

#else

#define xprintf(...)

#endif //debug

class memoryalloc;

//記憶體塊

class memoryblock

;class memoryalloc

~memoryalloc() }

protected:

//記憶體池首位址

char* _pbuf;

//頭部記憶體單元

memoryblock* _pheader;

//記憶體單元大小

size_t _nuitlsize;

//記憶體單元數量

size_t _nuitlnum;

public:

//初始化記憶體池

void initmemory()

pheadertemp->pnext = nullptr;

} //申請記憶體

void* wallocmemory(size_t size)

memoryblock* preturn = nullptr;

if (nullptr == _pheader)

else

return (char*)preturn+sizeof(memoryblock);

} //釋放記憶體

void wfreememory(void* pmem)

if (pblock->bpool)

else

}};templateclass memoryalloctor : public memoryalloc

};//記憶體管理工具

class memorymgr

~memorymgr()

private:

void initszalloc(int nbegin,int nend,memoryalloc* pmemalloc) }

public:

//單例模式

static memorymgr& instance()

//申請記憶體

void* wallocmem(size_t size)

else

}//釋放記憶體

void wfreemem(void* pmem)

else

}void addref(void* pmem)

private:

memoryalloctor<64,100> _mem64;

memoryalloctor<128, 100> _mem128;

memoryalloctor<256, 100> _mem256;

memoryalloctor<512, 100> _mem512;

memoryalloctor<1024, 100> _mem1024;

memoryalloc* _szalloc[_max_memorysize_ + 1];//記憶體池

};#endif//_memorymgr_hpp_

二、新增cpp檔案:walloc.cpp hellomemory.cpp

walloc.cpp**:

#include "walloc.h"

#include"memorymgr.hpp"

void* operator new(size_t size)

void operator delete(void *p)

void* operator new(size_t size)

void operator delete(void *p)

void* wmallocmem(size_t size)

void wfreemem(void *p)

hellomemory.cpp**:

#include #include #include "memorymgr.hpp"

int main(int argc,char** ar**)

for (size_t i = 0; i < 12; i++)

char *data120[120];

for (size_t i = 0; i < 12; i++)

for (size_t i = 0; i < 12; i++)

*/ char *data[1200];

for (size_t i = 0; i < 1200; i++)

for (size_t i = 0; i < 1200; i++)

return 0;

}

讀書筆記 Web伺服器記憶體管理

近日讀郭欣同學的 構建高效能的web站點 記憶體分配策略的設計,是web伺服器併發處理能力的重要保證。web伺服器每時每刻都要處理成千上萬的http請求,記憶體堆疊的分配何複製次數變得異常頻繁。我們可以改善資料結構和演算法複雜度來適當減少資料複製時間,對於記憶體分配,很多web伺服器使用各自的策略來...

伺服器記憶體

一 記憶體概述 記憶體的作用是暫時存放cpu運算的資料和所有程式執行的場地。二 ddr記憶體發展簡介 在ddr2中,還有fbd記憶體 三 常見記憶體型別 udimm,rdimm,lrdimm,nvdimm dimm的意思是雙列直插記憶體 什麼是rdimm和lrdimm?rdimm即register記...

伺服器開發之記憶體《一》 小片記憶體的管理

伺服器開發之記憶體 一 小片記憶體的管理 說個大白話 乙個程式要執行起來,首先要從cpu 要首先從磁碟中把程式載入的到記憶體,當執行起來的時候,要從記憶體再到 cpu的快取,cpu的快取還有多級,之所以硬體方面有這樣的設定,是因為他們之間每層之間的速度有著數量級的差別。下面以三國殺的資料伺服器為例子...