Files
mir_server/sdk/utils/nonuse/BufferAllocatorEx.h

127 lines
3.6 KiB
C
Raw Permalink Normal View History

2025-01-09 17:45:40 +08:00
#ifndef _MSG_ALLOCATOR_H_
#define _MSG_ALLOCATOR_H_
/*
#include <_osdef.h>
#include <Tick.h>
#include <string.h>
#include "Lock.h"
#include "Lock.h"
#ifdef _DEBUG
#define _BUFFER_TRACE
#endif
using namespace wylib::time::tick64;
class CBufferAllocator
{
public:
static const DWORD SmallBufferSize = 64; //С<><D0A1><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>С
static const DWORD MiddleBufferSize = 256; //<2F>е<EFBFBD><D0B5>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>С
static const DWORD LargeBufferSize = 1024; //<2F><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>С
#pragma pack(push, 1)
typedef struct tagBuffer
{
size_t dwSize; //<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ݶδ<DDB6>С
tagBuffer* pPrevBuffer;//ָ<><D6B8><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
TICKCOUNT dwFreeTick; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٵ<EFBFBD>ʱ<EFBFBD><CAB1>
#ifdef _BUFFER_TRACE
tagBuffer* pNextBuffer;//ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>¸<EFBFBD><C2B8>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EBA3AC><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD>
struct
{
const char* lpFile; //<2F><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>λ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD>
int nLine;
}al, fl;
BOOL boUsing; //<2F>Ƿ<EFBFBD>ʹ<EFBFBD>õı<C3B5><C4B1><EFBFBD>
#endif
}BUFFER, *PBUFFER;
#pragma pack(pop)
struct BufferStatic
{
size_t dwAllocSize;
size_t dwFreeSize;
};
typedef struct tagAllocatorMemoryInfo
{
BufferStatic SmallBuffer;
BufferStatic MiddleBuffer;
BufferStatic LargeBuffer;
BufferStatic SuperBuffer;
}ALLOCATOR_MEMORY_INFO, *PALLOCATPR_MEMORY_INFOR;
private:
//CRITICAL_SECTION m_BufferLock; //<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
wylib::sync::lock::CCSLock m_BufferLock; //<2F><><EFBFBD><EFBFBD>
PBUFFER m_pLastSmallBuffer; //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>С<EFBFBD><D0A1><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
PBUFFER m_pLastMiddleBuffer; //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
PBUFFER m_pLastLargeBuffer; //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>еĴ<D0B5><C4B4><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
PBUFFER m_pLastSuperBuffer; //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>еij<D0B5><C4B3><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
#ifdef _BUFFER_TRACE
PBUFFER m_pLastAllocedBuffer; //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
#endif
size_t m_dwAllocedSmallSize; //<2F>ѱ<EFBFBD><D1B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>С
size_t m_dwAllocedMiddleSize; //<2F>ѱ<EFBFBD><D1B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>С
size_t m_dwAllocedLargeSize; //<2F>ѱ<EFBFBD><D1B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>С
size_t m_dwAllocedSuperSize; //<2F>ѱ<EFBFBD><D1B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>С
size_t m_dwFreedSmallSize; //<2F>ѱ<EFBFBD><D1B1>ͷŵ<CDB7>С<EFBFBD><D0A1><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>С
size_t m_dwFreedMiddleSize; //<2F>ѱ<EFBFBD><D1B1>ͷŵ<CDB7><C5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>С
size_t m_dwFreedLargeSize; //<2F>ѱ<EFBFBD><D1B1>ͷŵĴ<C5B5><C4B4><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>С
size_t m_dwFreedSuperSize; //<2F>ѱ<EFBFBD><D1B1>ͷŵij<C5B5><C4B3><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>С
public:
CBufferAllocator();
~CBufferAllocator();
#ifndef _BUFFER_TRACE
PVOID AllocBuffer(size_t dwSize);
PVOID ReallocBuffer(LPVOID ptr, size_t dwNewSize);
VOID FreeBuffer(PVOID ptr);
#else
PVOID _AllocBuffer(size_t dwSize, const char* lpFile, int nLine);
PVOID _ReallocBuffer(LPVOID ptr, size_t dwNewSize, const char* lpFile, int nLine);
VOID _FreeBuffer(PVOID ptr, const char* lpFile, int nLine);
#define AllocBuffer(dwSize) _AllocBuffer(dwSize, __FILE__, __LINE__)
#define ReallocBuffer(ptr, dwNewSize) _ReallocBuffer(ptr, dwNewSize, __FILE__, __LINE__)
#define FreeBuffer(ptr) _FreeBuffer(ptr, __FILE__, __LINE__)
#endif
VOID GetMemoryInfo(CBufferAllocator::PALLOCATPR_MEMORY_INFOR pMemoryInfo);
// bIgnoreInterval:<3A>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD><C7BF>ɾ<EFBFBD><C9BE>
VOID CheckFreeBuffers(bool bIgnoreInterval = false);
};
class DataBuffer
{
public:
CBufferAllocator *m_pAllocator;
size_t m_dwSize;
char *pData;//<2F>ڴ<EFBFBD><DAB4><EFBFBD>ָ<EFBFBD><D6B8>
char *ptr;//д<>ڴ<EFBFBD>ָ<EFBFBD><D6B8>
char *pEnd;//<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
char *pReadPtr;//<2F><><EFBFBD>ڴ<EFBFBD>ָ<EFBFBD><D6B8>
#ifdef _BUFFER_TRACE
DataBuffer(CBufferAllocator *pAllocator, size_t dwSize, const char *_FILE, const int _LINE);
#else
DataBuffer(CBufferAllocator *pAllocator, size_t dwSize);
#endif
~DataBuffer();
};
#ifdef _BUFFER_TRACE
#define DATA_BUFFER_VAR(_allocator, _name, _size) DataBuffer _name((_allocator), (_size), __FILE__, __LINE__)
#else
#define DATA_BUFFER_VAR(_allocator, _name, _size) DataBuffer _name((_allocator), (_size))
#endif
*/
#endif