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),不在堆栈中.编译器还可以利用它来执行某些优化.
在典型的实现中,带有的版本static将在编译时将字符串放置在内存中的某个位置,而带有的版本static将使函数(每次被调用)在堆栈上分配一些空间并将字符串写入该空间。
static因此,带有的版本
foo更大的话,可能会更好)。