+ -
当前位置:首页 → 问答吧 → 一句看不懂的代码,求解释

一句看不懂的代码,求解释

时间:2011-12-19

来源:互联网

//static
inline void*& SimpleSegregatedAllocator::nextOf(void* const pAddr)
{
return *(static_cast<void**>(pAddr));
}

请问这代码是何用意?nextOf函数有什么用处?
nextOf函数这样被调用的
void* SimpleSegregatedAllocator::segregate(void* pChunk, size_t nChunkSize, 
  size_t uAllocSize, void* pEndNode )
{
  char* pOld = static_cast<char*>(pChunk) + 
  ((nChunkSize - uAllocSize)/uAllocSize ) * uAllocSize;
  nextOf(pOld) = pEndNode;///pOld point to the end node
  //only one partition
  if(pOld == pChunk) 
  {
  return pChunk;
  }
  for(char* pIter = pOld - uAllocSize; pIter != pChunk; 
  pOld = pIter,pIter -= uAllocSize)
  {
  nextOf(pIter) = pOld;
  }
  nextOf(pChunk) = pOld;
  return pChunk;
}

作者: HappyCodeFly   发布时间: 2011-12-19

该回复于2011-12-19 14:16:04被管理员删除

  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
#2楼 得分:0回复于:2011-12-19 14:06:22
inline void*& SimpleSegregatedAllocator::nextOf(void* const pAddr)
{
return *(static_cast<void**>(pAddr));
}
其实很简单,这只是一个将指针类型强制转换为void*类型而已,通过static_cast的手法来进行强转

作者: huaidan2012126   发布时间: 2011-12-19

应该是将pAddr转换成一个指向指针的指针

作者: qscool1987   发布时间: 2011-12-19

然后return呢?void*&? 还有 *(),外面那个*

作者: w378567402   发布时间: 2011-12-19

引用 4 楼 happycodefly 的回复:
然后return呢?void*&amp;? 还有 *(),外面那个*

好好给你解释下吧:
inline void*& SimpleSegregatedAllocator::nextOf(void* const pAddr)
先看参数void* const pAddr,这说明什么和类型的实参都可以,因为任何类型的实参都可以隐士转换为void*类型
再看函数体:return *(static_cast<void**>(pAddr));
先把pAddr一级指针强转为2级指针,为什么要这么做?主要是void类型不能解引用,但是void**可以解引用
这句就是先专为void**然后接一次引用
最后看返回类型:void*& 是一个指针引用类型,返回的是一个指针的引用

作者: HappyCodeFly   发布时间: 2011-12-19

还是不懂,能说的再详细点吗? 
void SimpleSegregatedAllocator::allocateChunk() 
{
  FX_DEBUG("Segregated allocator malloc [%u] bytes.", m_uChunkSize);

  void* pChunk = ::malloc(m_uChunkSize);
  FIRTEX_ASSERT2(pChunk);

  m_pChunk = pChunk;
  m_pFirst = segregate(pChunk, m_uChunkSize, m_uAllocSize, m_pFirst);
}

作者: qscool1987   发布时间: 2011-12-19

是不是这个函数的作用就是:把传过来的指针转换成void*,然后再把它自身返回?

作者: HappyCodeFly   发布时间: 2011-12-19

引用 7 楼 happycodefly 的回复:
是不是这个函数的作用就是:把传过来的指针转换成void*,然后再把它自身返回?

作者: HappyCodeFly   发布时间: 2011-12-19

inline void*& SimpleSegregatedAllocator::nextOf(void* const pAddr)
{
return pAddr;
}
那直接写成这样不就行了吗?

作者: qscool1987   发布时间: 2011-12-19

引用 8 楼 qscool1987 的回复:


谢谢qscool1987的解释,nextOf(pOld) = pEndNode;这一句也是高手写出来的啊,完全不知道做了什么。

作者: HappyCodeFly   发布时间: 2011-12-19

引用 10 楼 happycodefly 的回复:

引用 8 楼 qscool1987 的回复:


谢谢qscool1987的解释,nextOf(pOld) = pEndNode;这一句也是高手写出来的啊,完全不知道做了什么。


因为nextOf(pOld)返回的是引用类型,所以这个函数就是先把pOld转换了一下然后再赋值

作者: HappyCodeFly   发布时间: 2011-12-19