我想知道动态分配的数组的大小是否存储在内存中的某个地方,因为在由free()
初始化的指针上调用malloc()
函数或者它的系列会准确地释放内存。
因此,如果free()
确切地知道要分配多少内存,那是不是意味着大小值存储在内存中某处?
我们可以检索这个值吗?
答案 0 :(得分:1)
malloc()
是一个基于多级低层内存分配调用的库包装函数。它隐藏了类似OS的内存分配器分配的实际内存大小的详细信息,并直接将有效指针(如果成功)返回给进行调用的应用程序。指针可以安全使用(在边界内),并在使用完成后传递给free()
。
作为malloc()
的返回值返回的指针不需要(且大部分时间,它不是)实际地址由内存分配器返回。操作系统/内存分配器会进行一些簿记以保持跟踪已分配内存的大小,然后经过一些调整后,它会传递一个指向malloc()
的指针,然后将其返回给调用{{1}的应用程序。 }。
没有标准获取实际信息的方式(它本来是隐藏的,因为正当理由,恕我直言),但有平台获取信息的独立方式。
答案 1 :(得分:0)
很可能是;这确实是C标准库的合理实现。
但C标准并不保证。
没有什么可以阻止我编写符合C标准的库,总是为每个malloc
调用分配固定数量的内存! (如果您要求的金额超过该固定值,则适当返回)。然后我不需要存储在任何地方分配的金额。
答案 2 :(得分:0)
如果您使用的是glibc,则可以使用非标准的malloc_usable_size方法。但它可能返回的数字大于您分配的字节数。
答案 3 :(得分:0)
动态分配的数组的大小是否存储在RAM中?
也许。也许不是。
C 不指定内存管理的实现方式。如果可移植代码需要为指针分配大小,它必须自己处理。
选择平台确实提供辅助功能,因为某些系统确实包含存储在内存中的大小。其他编码指针的大小,每块内存的固定大小等等。