如何获取内存管理中下一个块的地址?

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&lt;void **&gt;() 做什么吗?如果没有,您可以在 C++ 教科书中轻松找到答案。既然您知道它的作用,请拿一张纸并写下解释。现在,您知道一元 * 运算符的作用吗?好的,同样的方法。现在,把两个和两个放在一起,你就有答案了! 看起来p_block 包含其下一个块的地址。 【参考方案1】:

p_block 变量是某段内存的地址。您将其转换为带有reinterpret_cast&lt;void**&gt;(p_block)void**,这意味着它现在被视为内存中地址(B) 的地址(A)。然后你取消引用它(使用*something)以获取地址B

这种方案通常用于内存领域,其中一个内存块(通常是一个控制段之前malloc返回的内存地址)包含下一个块的地址(无论是否已分配) .例如:

             +----------+    +----------+
firstFree -> | nextFree | -> | nextFree | -> nullptr
             +----------+    +----------+
             | user bit |    | user bit |
             +----------+    +----------+

【讨论】:

以上是关于如何获取内存管理中下一个块的地址?的主要内容,如果未能解决你的问题,请参考以下文章

澄清Windows中虚拟内存管理器如何获取内存映射文件数据

用c语言如何获取内存地址?

java String 内存地址问题?如何获取 String 内存地址!

如何获取到JAVA对象所在的内存地址

如何在Elixir中获取变量的内存位置?

如何获取 JavaScript 变量的内存地址?