But how can I then implement realloc in my code with malloc/free/..?
如果您已经使用malloc &免费的,为什么不使用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;
}
你的realloc实现将不得不遵循malloc和free的实现。在没有malloc和free的特殊知识的情况下实现它并不是真正可行的。如果你确实得到它与一个malloc实现工作,它可能不会与其他人一起工作。 – nategoose 2010-08-13 17:57:14