gpt4 book ai didi

c - 何时使用静态数组与动态数组 C

转载 作者:行者123 更新时间:2023-11-30 20:30:32 25 4
gpt4 key购买 nike

我对 C 有点陌生,我只是想知道是否在某些情况下其中一种优于另一种,是否仅取决于一个人的偏好,或者是否有一种总是比另一种更好。

最佳答案

请注意,“静态”一词在 C 中具有其他含义。您似乎是在询问声明具有常量大小的数组(例如 int a[40])与声明具有可变长度的数组,例如 int a[n],其中 n 在运行时已知,但通常在编译时未知。

在这种情况下,一般规则是在以下情况下使用静态大小:

  • 当编译时已知确切大小时,或者
  • 当上限已知并且使用上限不会浪费太多空间。

一般来说,使用静态大小效率更高,因为编译器拥有更多信息,因此有更多优化机会。当编译器编译地址下标运算时,它必须生成计算地址的指令。如果它知道数组大小,它可能有机会在编译时执行一些计算(例如,对于 int a[40]; a[13] = 2;,编译器可以计算出a[13] 是从 a 开头算起的 13•4 = 52 个字节(当然假设是一个四字节的 int)或者将数组大小作为立即操作数包含在指令中(这意味着它内置于代码中,不必在内存中查找或在运行时以其他方式获取)。

如果编译器不知道数组大小,则必须在程序运行时生成完整的代码来计算地址。在当今典型的编程环境中,这通常不是很大的成本,但可能是一个考虑因素。

此外,如果数组具有静态大小,则它可以是外部对象(在任何函数外部定义)。外部对象具有静态存储持续时间,这意味着它们在正在运行的程序的生命周期内存在。 (这里,“静态”是在 C 意义上使用的,与固定大小意义上的不同。)当编译器知道数组的大小时,它可以为其规划在程序启动时提供的存储空间。这使得具有静态大小的数组能够具有静态存储持续时间。对于动态大小的数组,编译器通常无法为其规划必要的存储,因此它们不能是外部对象。

关于c - 何时使用静态数组与动态数组 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54073219/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com