我可以获得最佳性能制作静态变量吗?

Jac*_*ack 13 c static static-variables

为什么有些人这样做:

char baa(int x) {
    static char foo[] = " .. ";
    return foo[x ..];
}
Run Code Online (Sandbox Code Playgroud)

代替:

char baa(int x) {
    char foo[] = " .. ";
    return foo[x ..];
}
Run Code Online (Sandbox Code Playgroud)

在linux源代码应用程序上看起来很常见.有性能差异?如果有,有人可以解释原因吗?提前致谢.

Mah*_*dsi 14

本身不是性能,而是减少内存使用量.这里一个性能提升,但它不是(通常)的首要原因你会看到这样的代码.

函数中的变量在堆栈上分配,每次调用函数时都会保留和删除它们,更重要的是,它们将计入堆栈大小限制,这是许多嵌入式和资源受限平台的严重限制.

但是,静态变量存储在.BSS或者.DATA段中(非显式初始化的静态变量将转到.BSS,静态初始化的静态变量将转到.DATA),不在堆栈中.编译器还可以利用它来执行某些优化.


Gar*_*han 5

在典型的实现中,带有的版本static将在编译时将字符串放置在内存中的某个位置,而带有的版本static将使函数(每次被调用)在堆栈上分配一些空间并将字符串写入该空间。

static因此,带有的版本

  • 可能会更快
  • 可能会使用更少的内存
  • 将使用较少的堆栈空间(在某些系统上这是一种稀缺资源)
  • 会更好地与缓存配合使用(对于较小的字符串来说,这可能没什么大不了的,但是如果foo更大的话,可能会更好)。