一、新建空的控制台專案 命名為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的快取還有多級,之所以硬體方面有這樣的設定,是因為他們之間每層之間的速度有著數量級的差別。下面以三國殺的資料伺服器為例子...