龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

简明分析C/C++内存分配的解决方案(5)

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
if(ptrChunk) { ptrChunk->Data = NULL; ptrChunk->DataSize = 0; ptrChunk->UsedSize = 0; ptrChunk->IsAllocationChunk = false; ptrChunk->Next = NULL; } return ptrChunk; } SMemoryChunk *CMemoryPool::FindCh

  if(ptrChunk)

  {

    ptrChunk->Data = NULL;

    ptrChunk->DataSize = 0;

    ptrChunk->UsedSize = 0;

    ptrChunk->IsAllocationChunk = false;

    ptrChunk->Next = NULL;

  }

  return ptrChunk;

}

SMemoryChunk *CMemoryPool::FindChunkSuitableToHoldMemory(const std::size_t &sMemorySize)

{

  unsigned int uiChunksToSkip = 0;

  bool bContinueSearch = true;

  SMemoryChunk *ptrChunk = m_ptrCursorChunk;

  for(unsigned int i = 0; i < m_uiMemoryChunkCount; i++)

  {

    if(ptrChunk)

    {

      if(ptrChunk == m_ptrLastChunk)

      {

        ptrChunk = m_ptrFirstChunk;

      }

      if(ptrChunk->DataSize >= sMemorySize)

      {

        if(ptrChunk->UsedSize == 0)

        {

          m_ptrCursorChunk = ptrChunk;

          return ptrChunk;

        }

      }

      uiChunksToSkip = CalculateNeededChunks(ptrChunk->UsedSize);

      if(uiChunksToSkip == 0) uiChunksToSkip = 1;

      ptrChunk = SkipChunks(ptrChunk, uiChunksToSkip);

    }

    else

    {

      bContinueSearch = false

    }

  }

  return NULL;

}

std::size_t CMemoryPool::MaxValue(const std::size_t &sValueA, const std::size_t &sValueB) const

{

  if(sValueA > sValueB)

  {

    return sValueA;

  }

  return sValueB;

}

void CMemoryPool::SetMemoryChunkValues(SMemoryChunk *ptrChunk, const std::size_t &sMemBlockSize)

{

  if((ptrChunk))

  {

    ptrChunk->UsedSize = sMemBlockSize;

  }

  else

  {

    assert(false && "Error : Invalid NULL-Pointer passed");

  }

}

精彩图集

赞助商链接