【问题标题】:How is the size of dynamic memory tracked in C [duplicate]C中如何跟踪动态内存的大小[重复]
【发布时间】:2013-03-22 21:52:02
【问题描述】:

我了解使用calloc()malloc() 将在堆上分配特定数量的内存并返回一个指向分配开头的指针。

我也知道free( poinerVar) 将取消分配(释放分配的内存)。但是,我无法想象 free() 如何知道要取消分配的内存量。诸如 C#、Java 等托管语言会跟踪它的垃圾回收对象,但 C 肯定不会(据我所知)。

在内存管理级别上发生了什么,可以使用 free 释放内存并仅将指针变量传递给它。

【问题讨论】:

  • 有人必须以某种方式跟踪。语言标准只是不需要任何特定的方式来做到这一点。一切顺利!

标签: c malloc free dynamic-memory-allocation calloc


【解决方案1】:

C 标准没有说明 malloc/free 如何在幕后工作。只是外在的行为。如果你真的想了解它,你需要看一个具体的实现。查看一个开源 libc,比​​如 GNU/gcc 使用的那个。

【讨论】:

    【解决方案2】:

    这里的常用方法是内存分配函数在实际内存块之前存储有关已分配空间的元数据。

    这样,free() 就可以读取实际分配块前面的内存,并且可以找出它实际应该释放多少内存。

    【讨论】:

      猜你喜欢
      • 2013-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-28
      • 2016-02-08
      • 2019-10-31
      相关资源
      最近更新 更多