Files
mir_server/Gateway/srvlib/include/memory/base_allocator.hpp

91 lines
1.9 KiB
C++
Raw Normal View History

2025-01-09 17:45:40 +08:00
#ifndef _BASE_ALLOCATOR_H_
#define _BASE_ALLOCATOR_H_
/************************************************************************
* <EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɼ̳<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿڣ<EFBFBD>ʵ<EFBFBD>ֲ<EFBFBD>ͬ<EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>ֵ<EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>crt<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
************************************************************************/
#include "os_def.h"
#include "memory_counter.hpp"
#ifdef _MEMORY_TRACE_
#define AllocBuffer(count_) _AllocBuffer(count_,__FILE__, __LINE__)
#define ReAllocBuffer(src,count_) _ReAllocBuffer(src,count_,__FILE__, __LINE__)
#define FreeBuffer(ptr) _FreeBuffer(ptr, __FILE__, __LINE__)
#endif
class BaseAllocator : public AllocatorCounterItem
{
public:
#ifndef _MEMORY_TRACE_
virtual void* AllocBuffer(size_t count)
#else
virtual void* _AllocBuffer(size_t count, const char*, int)
#endif
{
size_t* result = (size_t*)malloc(count + sizeof(size_t));
#ifdef _MEMORY_TRACE_
if (result != NULL)
{
alloc_total_ += count;
*result = count;
}
#endif
return (void*)(result + 1);
}
#ifndef _MEMORY_TRACE_
virtual void* ReAllocBuffer(void* src, size_t count)
#else
virtual void* _ReAllocBuffer(void* src, size_t count, const char*, int)
#endif
{
#ifdef _MEMORY_TRACE_
if (src)
{
size_t old = *((size_t*)src - 1);
alloc_total_ -= old;
src = (void*)((size_t*)src - 1);
}
alloc_total_ += count; // ע<><D7A2><EFBFBD><EFBFBD>size_t<5F><74><EFBFBD><EFBFBD>
#endif
size_t* result = (size_t*)realloc(src, count + sizeof(size_t));
*result = count;
return (void*)(result + 1);
}
#ifndef _MEMORY_TRACE_
virtual void FreeBuffer(void* ptr)
#else
virtual void _FreeBuffer(void* ptr, const char*, int)
#endif
{
if (!ptr) return;
#ifdef _MEMORY_TRACE_
size_t old = *((size_t*)ptr - 1);
alloc_total_ -= old;
#endif
free((size_t*)ptr - 1);
}
BaseAllocator(const char* namestr) : AllocatorCounterItem(namestr)
{
}
virtual ~BaseAllocator()
{
}
void SetMultiThread(bool){}
void GC()
{
}
};
#endif //end _BASE_ALLOCATOR_H_