如何获取内存管理中下一个块的地址?
Posted
技术标签:
【中文标题】如何获取内存管理中下一个块的地址?【英文标题】:How to get the address of next block in memory management? 【发布时间】:2020-10-27 01:38:15 【问题描述】:看了内存管理的代码,看不懂下面这个函数的意思,请问这个函数是怎么工作的?
// Get the reference of next block's address in current block.
static void*& GetNextBlock(void* p_block)
return *(reinterpret_cast<void**>(p_block));
根据对代码的注释,该函数返回p_block的下一个块的地址,但我认为该函数返回p_block的地址。
【问题讨论】:
试着把它分解成更小的块。你知道reinterpret_cast<void **>()
做什么吗?如果没有,您可以在 C++ 教科书中轻松找到答案。既然您知道它的作用,请拿一张纸并写下解释。现在,您知道一元 *
运算符的作用吗?好的,同样的方法。现在,把两个和两个放在一起,你就有答案了!
看起来p_block
包含其下一个块的地址。
【参考方案1】:
p_block
变量是某段内存的地址。您将其转换为带有reinterpret_cast<void**>(p_block)
的void**
,这意味着它现在被视为内存中地址(B) 的地址(A)。然后你取消引用它(使用*something
)以获取地址B
。
这种方案通常用于内存领域,其中一个内存块(通常是一个控制段之前从malloc
返回的内存地址)包含下一个块的地址(无论是否已分配) .例如:
+----------+ +----------+
firstFree -> | nextFree | -> | nextFree | -> nullptr
+----------+ +----------+
| user bit | | user bit |
+----------+ +----------+
【讨论】:
以上是关于如何获取内存管理中下一个块的地址?的主要内容,如果未能解决你的问题,请参考以下文章