一句看不懂的代码,求解释
时间:2011-12-19
来源:互联网
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
|
作者: huaidan2012126 发布时间: 2011-12-19
作者: qscool1987 发布时间: 2011-12-19
作者: w378567402 发布时间: 2011-12-19
然后return呢?void*&? 还有 *(),外面那个*
好好给你解释下吧:
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
作者: HappyCodeFly 发布时间: 2011-12-19
是不是这个函数的作用就是:把传过来的指针转换成void*,然后再把它自身返回?
对
作者: HappyCodeFly 发布时间: 2011-12-19
{
return pAddr;
}
那直接写成这样不就行了吗?
作者: qscool1987 发布时间: 2011-12-19
对
谢谢qscool1987的解释,nextOf(pOld) = pEndNode;这一句也是高手写出来的啊,完全不知道做了什么。
作者: HappyCodeFly 发布时间: 2011-12-19
引用 8 楼 qscool1987 的回复:
对
谢谢qscool1987的解释,nextOf(pOld) = pEndNode;这一句也是高手写出来的啊,完全不知道做了什么。
因为nextOf(pOld)返回的是引用类型,所以这个函数就是先把pOld转换了一下然后再赋值
作者: HappyCodeFly 发布时间: 2011-12-19
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28