Пример #1
0
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;
}
Пример #2
0
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;
}