在 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 语言中动态分配数组的大小来自该语言对内存管理灵活性和平台独立性的关注。虽然它在某些场景中存在局限性,但它也允许多种实施策略和优化机会。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3