But how can I then implement realloc in my code with malloc/free/..?
如果您已经在使用 malloc 和 free,为什么不直接使用 realloc?否则你可以看一下 MSVC/gcc 等附带的 CRT 源代码(或者只是下载它,在 GCC 的情况下),看看他们是如何实现它的。如果您正在运行自定义分配器,那么它的情况会更复杂一些,例如:我使用带有平板类型系统的二进制 bin,在这种情况下 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;
}