”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何确定 C++ 中动态分配数组的大小?

如何确定 C++ 中动态分配数组的大小?

发布于2024-11-09
浏览:624

How Can You Determine the Size of a Dynamically Allocated Array in C  ?

在 C 中动态分配后确定数组大小

在 C 中,使用 new 运算符动态分配的数组本质上不会以编程方式公开其大小。这个问题源于这样的观察:delete[] 必须知道分配的数组的大小才能有效地释放内存。

为什么没有内置函数来获取数组大小?

与在堆栈上声明的数组不同,其大小可以使用 sizeof() 确定,动态分配的数组的大小在编译期间是未知的。这是因为运行时或操作系统的内存管理器管理分配的内存,而不是编译器。 sizeof() 作为编译时常量运行,不能动态计算动态分配数组的大小。

替代策略

即使 C 没有提供内置的函数获取数组的大小,还有替代方法:

  • 指针语义: 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