But how can I then implement realloc in my code with malloc/free/..?
すでに malloc と free を使用している場合は、realloc を使用してみませんか? それ以外の場合は、MSVC/gcc などに同梱されている CRT ソースを見て (または、GCC の場合はダウンロードして)、それらがどのように実装されているかを確認できます。カスタムアロケーターを実行している場合は、もう少し状況に応じて、たとえば、スラブ型システムでバイナリビンを使用します。この場合、realloc は単純です。
void* Reallocate(Manager* pManager, void* pBlock, size_t nSize, const char* szFile, const DWORD dwLine)
{
#if ( MMANAGER_NULL_TO_DEFAULT )
if(pManager == NULL)
pManager = MMANAGER_DEFUALT_MANAGER;
#endif
if(pBlock == NULL)
return Allocate(pManager,nSize,szFile,dwLine);
else if(nSize == 0)
{
Free(pManager,pBlock,szFile,dwLine);
return NULL;
}
BlockHeader* pHeader = GetHeader(pBlock);
size_t nPrevSize = pHeader->pPoolBlock->nSize;
if(nPrevSize < nSize)
{
void* pNewBlock = Allocate(pManager,nSize,szFile,dwLine);
memcpy(pNewBlock,pBlock,nPrevSize);
PoolBlock* pPoolBlock = pHeader->pPoolBlock;
if(pPoolBlock == NULL)
free(pHeader);
else
FreeBlock(pPoolBlock,pHeader);
return pNewBlock;
}
return pBlock;
}