用 new T[] 分配的数组可以透露它们的大小吗?
与它的对应的 delete[] 不同,它本质上知道 T[] 的大小分配的数组,C 缺乏一种机制来以编程方式确定使用 new 创建的数组的大小T[].
深入探究区别
这种差异的关键在于delete[]的内在本质。在编译期间,数组的大小由运行时或操作系统的内存管理器精心保存。但是,编译器仍然无法访问此信息。相反,sizeof() 作为编译器的操作数而不是真正的函数,无法确定动态分配数组的大小,因为它们的范围在编译时不确定。
说明性示例
考虑这个代码示例:
在这里,编译器面临着一个令人困惑的问题困境:如何确定p的大小。数组的指针缺乏所分配内存块的开始或结束的固有知识。它们可能指示块的开始、其中的特定元素,甚至任意位置。
固有限制
C 和 C 数组,与一流不同对象,退化为指针。编译器和程序都不知道指针是否标识了新块的开始、单个对象或中间地址。
这种设计选择源于 C 和 C 中内存管理的委托性质,从而使它给程序员和操作系统。新建和删除的实现在不同平台和场景之间差异很大,排除了 C 标准内的标准化。
以上是你能确定 C 中用'new T[]”分配的数组的大小吗?的详细内容。更多信息请关注PHP中文网其他相关文章!