void* Allocator::_Realloc(void* ptr, size_t size, const char* file_name, unsigned int line_num) { //LOG("%s:%d realloc(%p, %d)\n", file_name, line_num, ptr, size); byte* pBlock = (byte*)ptr - sizeof(Header); Header* pHeader = reinterpret_cast<Header*>(pBlock); Footer* pFooter = reinterpret_cast<Footer*>((byte*)ptr+size); ASSERT(pHeader->m_pBlockNode != NULL); BlockNode* pNode = pHeader->m_pBlockNode; size_t total = size + sizeof(Header) + sizeof(Footer); pBlock = (byte*)realloc(pBlock, total); ptr = pBlock + sizeof(Header); pHeader = reinterpret_cast<Header*>(pBlock); pFooter = reinterpret_cast<Footer*>((byte*)ptr+size); pHeader->Init(size, file_name, line_num); pFooter->Init(size, file_name, line_num); pNode->pBlock = pBlock; pHeader->m_pBlockNode = pNode; return ptr; }
void* Allocator::_Malloc(size_t size, const char* file_name, unsigned int line_num) { //LOG("%s:%d malloc(%d)\n", file_name, line_num, size); size_t total = size + sizeof(Header) + sizeof(Footer); byte* pBlock = (byte*)malloc(total); byte* ptr = pBlock + sizeof(Header); Header* pHeader = reinterpret_cast<Header*>(pBlock); Footer* pFooter = reinterpret_cast<Footer*>(ptr+size); pHeader->Init(size, file_name, line_num); pFooter->Init(size, file_name, line_num); AddBlock(pBlock); return ptr; }