But how can I then implement realloc in my code with malloc/free/..?
Если вы уже используете malloc & free, почему бы просто не использовать realloc?
иначе вы можете просто взглянуть на источник CRT, который поставляется с MSVC / gcc и т. д. (или просто загрузить его, в случае 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;
}