你能获得用 new T[] 分配的数组的大小吗?
本问题探讨了使用 new 运算符以编程方式确定在堆上分配的 C 数组大小的挑战。
为什么这是一个挑战?
与声明的数组不同在堆栈 (int arr[256];) 上,其大小在编译期间已知,而用 new 分配的数组的大小在运行时动态确定。这意味着编译器在编译期间无法知道此类数组的大小,并且 sizeof 运算符仅返回指针本身的大小。
编译器限制
sizeof 是由编译器静态评估,这意味着它不能用于动态分配的数组。此外,C 数组不是一流的对象,并且会退化为指针,这使得编译器或程序很难区分指向已分配数组开头的指针和指向单个对象或任意内存位置的指针。
运行时知识
delete [] 知道分配的大小,但这些知识驻留在运行时或操作系统的内存管理器中,在编译期间无法访问。
内存管理注意事项
C 和 C 将内存管理留给程序员和操作系统。因此,实现 new 和 delete 是依赖于平台的,并且可能不涉及跟踪分配的数组大小。这种方法允许在各种系统上进行高效、灵活的内存管理,但它牺牲了以编程方式获取数组大小的能力。
以上是你能确定 C 中用'new”分配的数组的大小吗?的详细内容。更多信息请关注PHP中文网其他相关文章!