首页  >  文章  >  后端开发  >  你能确定 C 中用'new T[]”分配的数组的大小吗?

你能确定 C 中用'new T[]”分配的数组的大小吗?

DDD
DDD原创
2024-11-08 05:39:01349浏览

Can You Determine the Size of an Array Allocated with `new T[]` in C  ?

用 new T[] 分配的数组可以透露它们的大小吗?

与它的对应的 delete[] 不同,它本质上知道 T[] 的大小分配的数组,C 缺乏一种机制来以编程方式确定使用 new 创建的数组的大小T[].

深入探究区别

这种差异的关键在于delete[]的内在本质。在编译期间,数组的大小由运行时或操作系统的内存管理器精心保存。但是,编译器仍然无法访问此信息。相反,sizeof() 作为编译器的操作数而不是真正的函数,无法确定动态分配数组的大小,因为它们的范围在编译时不确定。

说明性示例

考虑这个代码示例:

在这里,编译器面临着一个令人困惑的问题困境:如何确定p的大小。数组的指针缺乏所分配内存块的开始或结束的固有知识。它们可能指示块的开始、其中的特定元素,甚至任意位置。

固有限制

C 和 C 数组,与一流不同对象,退化为指针。编译器和程序都不知道指针是否标识了新块的开始、单个对象或中间地址。

这种设计选择源于 C 和 C 中内存管理的委托性质,从而使它给程序员和操作系统。新建和删除的实现在不同平台和场景之间差异很大,排除了 C 标准内的标准化。

以上是你能确定 C 中用'new T[]”分配的数组的大小吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

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