在 C 中动态分配后确定数组大小
在 C 中,使用 new 运算符动态分配的数组本质上不会以编程方式公开其大小。这个问题源于这样的观察:delete[] 必须知道分配的数组的大小才能有效地释放内存。
为什么没有内置函数来获取数组大小?
与在堆栈上声明的数组不同,其大小可以使用 sizeof() 确定,动态分配的数组的大小在编译期间是未知的。这是因为运行时或操作系统的内存管理器管理分配的内存,而不是编译器。 sizeof() 作为编译时常量运行,无法动态计算动态分配数组的大小。
替代策略
尽管 C 没有提供内置的函数来获取数组的大小,还有其他方法:
int *arr = new int[256]; int *p = &arr[100]; int size = p - arr; // Subtracting pointers yields the size
影响
缺乏确定 C 语言中动态分配数组大小的标准化方法来自该语言对内存管理灵活性和平台独立性的关注。虽然它在某些场景下存在局限性,但它也允许多种实施策略和优化机会。
以上是如何确定 C 中动态分配数组的大小?的详细内容。更多信息请关注PHP中文网其他相关文章!