C++ - 内存泄漏:指针(元)信息存储在哪里?

Eya*_*yal 8 c++ memory memory-leaks

这是一个我无法找到答案的基本问题.

给定下一个代码,将发生内存泄漏:

   int main(){
          A* a = new A();
          // 1
     } 
     //2
Run Code Online (Sandbox Code Playgroud)

让我们说,一个获得了价值1000也就是说,在堆上地址1000现在采取的一个对象.在1,a == 1000和2 a超出范围.但缺少一些信息.

在现实生活中,地址1000是存储器中字节的地址.该字节没有存储有价值信息的信息.

我的问题:

  1. 谁保留这些信息?

  2. 这些信息是如何保存的?

  3. 哪个组件"知道"指针指向位置?计算机如何知道指向sizeof(A)字节?

谢谢!

Eri*_*rik 6

  1. 此信息保存在程序中的变量中 a
  2. 编译时编译器知道这一点.运行时只有分配器才知道"在这个特定的地址sizeof(A)字节是保留的" - 你不能使用那个信息,你只需要将这些字节视为包含A


How*_*ant 3

通常 new 和 delete 运算符是在 malloc 和 free 之上实现的,尽管此细节未指定。malloc 和 free 都指向一个数据结构,该结构跟踪哪些内存区域已分配,哪些未分配,以及每个区域有多大。Knuth 的《计算机编程艺术》第 1 卷对一些分配器设计进行了很好的描述。