首页 >后端开发 >C++ >`delete[]` 如何知道它正在释放的数组的大小?

`delete[]` 如何知道它正在释放的数组的大小?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-25 00:18:10763浏览

How Does `delete[]` Know the Size of the Array It's Deallocating?

内存分配器如何知道Delete[]的数组大小

在 C 中,delete[] 运算符用于释放数组记忆中的物体。然而,与明确需要数组大小的 new[] 运算符不同,delete[] 似乎在没有此信息的情况下进行操作。它如何确定数组的大小?

当您使用 new[] 在堆上分配内存时,内存分配器会为数组元素分配连续的内存块,并存储有关分配的附加信息,包括它的大小。此信息通常存储在紧邻已分配内存之前的标头中。

标准化

使用分配的内存存储数组大小的方法在 C 本身中并未标准化。不同的内存分配器实现不同的技术:

  • 堆元数据:一些分配器使用内存中的数据结构来跟踪分配细节,包括数组大小。该数据结构由分配器管理,对程序不直接可见。
  • 内存标头: 如前所述,许多分配器将数组大小和其他信息存储在紧邻之前的标头中分配的内存。该标头通常以唯一的标记或标志为前缀,以将其与实际数据区分开来。
  • 特殊指针值:某些分配器可能在数组指针中使用特殊值来指示结束数组的。例如,当数组完全释放时,指针可能会设置为空指针。

检索数组大小

删除期间,delete[]从关联的标头或内存分配器中检索数组大小。通过知道大小,delete[] 可以有效地释放整个对象数组。

结论

综上所述,new[] 分配的内存携带了其相关信息大小,通过堆元数据、内存标头或指针值。 delete[] 运算符使用此信息来确定释放期间的数组大小,从而实现高效的内存管理,而无需显式提供大小。

以上是`delete[]` 如何知道它正在释放的数组的大小?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn