繁体   English   中英

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

[英]When to use static arrays vs dynamic arrays C

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

注意,词“静态”具有C.其他含义您似乎询问有关声明具有恒定尺寸的阵列,诸如之间的差int a[40]对声明数组具有可变的长度,如int a[n] ,其中n在运行时已知,但通常在编译时未知。

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM