动态分配的数组的大小是否存储在RAM中的某个位置?

时间:2016-06-02 12:57:24

标签: c memory memory-management malloc dynamic-memory-allocation

我想知道动态分配的数组的大小是否存储在内存中的某个地方,因为在由free()初始化的指针上调用malloc()函数或者它的系列会准确地释放内存。

因此,如果free()确切地知道要分配多少内存,那是不是意味着大小值存储在内存中某处?

我们可以检索这个值吗?

4 个答案:

答案 0 :(得分:1)

malloc()是一个基于多级低层内存分配调用的库包装函数。它隐藏了类似OS的内存分配器分配的实际内存大小的详细信息,并直接将有效指针(如果成功)返回给进行调用的应用程序。指针可以安全使用(在边界内),并在使用完成后传递给free()

作为malloc()的返回值返回的指针不需要(且大部分时间,它不是实际地址由内存分配器返回。操作系统/内存分配器会进行一些簿记以保持跟踪已分配内存的大小,然后经过一些调整后,它会传递一个指向malloc()的指针,然后将其返回给调用{{1}的应用程序。 }。

没有标准获取实际信息的方式(它本来是隐藏的,因为正当理由,恕我直言),但有平台获取信息的独立方式。

答案 1 :(得分:0)

很可能是;这确实是C标准库的合理实现

但C标准并不保证。

没有什么可以阻止我编写符合C标准的库,总是为每个malloc调用分配固定数量的内存! (如果您要求的金额超过该固定值,则适当返回)。然后我需要存储在任何地方分配的金额。

答案 2 :(得分:0)

如果您使用的是glibc,则可以使用非标准的malloc_usable_size方法。但它可能返回的数字大于您分配的字节数。

答案 3 :(得分:0)

  

动态分配的数组的大小是否存储在RAM中?

也许。也许不是。

C 指定内存管理的实现方式。如果可移植代码需要为指针分配大小,它必须自己处理。

选择平台确实提供辅助功能,因为某些系统确实包含存储在内存中的大小。其他编码指针的大小,每块内存的固定大小等等。

相关问题