c++ - 如何获取内存管理中下一个 block 的地址?

标签 c++ pointers memory

我看了内存管理的代码,不明白下面这个函数的意思,请问这个函数是怎么工作的?

// 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的下一个 block 的地址,但我认为该函数返回的是p_block的地址。

最佳答案

p_block变量是某 block 内存的地址。您将其转换到 void**reinterpret_cast<void**>(p_block) ,这意味着它现在被视为内存中地址 (B) 的地址 (A)。然后您取消引用它(使用 *something )以获取地址 B .

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

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

关于c++ - 如何获取内存管理中下一个 block 的地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64547212/

相关文章:

c++ - 按值、引用和名称调用

c++ - 释放 LPDIRECT3D9 和 LPDIRECT3DDEVICE9 后的内存状态

c++ - 包括未找到的 clang++ + OpenMP + stdlibc++

C++ 复制指针

python - python 中的迭代会消耗整个内存 - 错误代码?

c++ - PFArrayD.cpp 实现 Copy Constructor

c++ - C++ 中的 char 和 char* 有什么区别?

c++ - C 或 C++。如何比较给定 char * 指针的两个字符串?

c++ - 可以将连续放置在内存中的变量视为数组的一部分吗?

memory - GPU PoolAllocator 爆 CPU 内存