我需要幫助理解下面的代碼片段... allocate是一個函數,將被重載的新運算符調用分配內存。我有問題想了解,特別是以下類型轉換:重載新的和刪除C++跟蹤內存分配
*static_cast<std::size_t*>(mem) = pAmount; //please explain?
return static_cast<char*>(mem) + sizeof(std::size_t); //?
和..
// get original block
void* mem = static_cast<char*>(pMemory) - sizeof(std::size_t); //?
的代碼如下所示:
const std::size_t allocation_limit = 1073741824; // 1G
std::size_t totalAllocation = 0;
void* allocate(std::size_t pAmount)
{
// make sure we're within bounds
assert(totalAllocation + pAmount < allocation_limit);
// over allocate to store size
void* mem = std::malloc(pAmount + sizeof(std::size_t));
if (!mem)
return 0;
// track amount, return remainder
totalAllocation += pAmount;
*static_cast<std::size_t*>(mem) = pAmount;
return static_cast<char*>(mem) + sizeof(std::size_t);
}
void deallocate(void* pMemory)
{
// get original block
void* mem = static_cast<char*>(pMemory) - sizeof(std::size_t);
// track amount
std::size_t amount = *static_cast<std::size_t*>(mem);
totalAllocation -= pAmount;
// free
std::free(mem);
}
所以*的static_cast <性病::爲size_t *>(MEM)= pAmount可以是寫成size_t * ptr = static_cast(mem)...這裏ptr指向分配的內存的開始,然後* ptr = pAmount; ? –
maxpayne
2011-03-08 15:28:17
@maxpayne:沒錯。 – 2011-03-08 15:30:36
在分配函數中,返回0和返回NULL是否有區別?僅僅是一個值爲0的宏? – maxpayne 2011-03-08 15:36:22