动态分配的数组的大小是否存储在 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 平台确实提供辅助功能,因为某些系统确实包含存储在内存中的大小。其他人编码指针中的大小,每个内存块的固定大小等
我想知道动态分配的数组的大小是否存储在内存中的某个位置,因为在由 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 平台确实提供辅助功能,因为某些系统确实包含存储在内存中的大小。其他人编码指针中的大小,每个内存块的固定大小等