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

Is the size of a dynamically allocated array stored somewhere in RAM?

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

因此,如果 free() 确切知道要取消分配多少内存,这是否意味着大小值存储在内存中的某个位置?

我们可以检索这个值吗?

malloc()是一个库包装函数,覆盖了很多层的低层内存分配调用。它隐藏了一些细节,例如 OS 的内存分配器分配的实际内存大小,并直接 return 是指向进行调用的应用程序的有效指针(如果成功)。指针可以安全使用(在范围内)并在使用完成后传递给 free()

不需要将指针 return 编辑为 malloc() 的 return 值(而且大多数情况下,它不是 实际地址return由内存分配器编辑。 OS/ 内存分配器在后台做一些簿记以跟踪分配内存的大小,然后在进行一些调整后,它传递一个指向 malloc() 的指针,然后是 return编辑到调用 malloc().

的应用程序

没有标准获取实际信息的方式(它本来是对用户隐藏的,出于适当的原因,恕我直言), 但有平台依赖的方式获取信息。

很可能是;这确实是 C 标准库的明智 实现

但 C 标准不保证。

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

如果您使用的是 glibc,则可以使用非标准 malloc_usable_size 方法。不过,它可能 return 比您分配的字节数更大。

Is the size of a dynamically allocated array stored somewhere in RAM?

也许吧。也许不是。

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


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