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