为什么有些人做的事:
char baa(int x) {
static char foo[] = " .. ";
return foo[x ..];
}
代替:
char baa(int x) {
char foo[] = " .. ";
return foo[x ..];
}
看起来像Linux的源代码的应用非常普遍。 有性能上的差异? 如果是,有人可以解释为什么? 提前致谢。
为什么有些人做的事:
char baa(int x) {
static char foo[] = " .. ";
return foo[x ..];
}
代替:
char baa(int x) {
char foo[] = " .. ";
return foo[x ..];
}
看起来像Linux的源代码的应用非常普遍。 有性能上的差异? 如果是,有人可以解释为什么? 提前致谢。
这不是本身的性能,而是以减少内存使用情况。 有一个性能提升,但它不是(通常)的首要原因你会看到这样的代码。
在函数变量是在栈上分配的,他们会被保留,并且每个函数被调用时删除,重要的是,他们会朝堆栈大小限制这是许多嵌入式和资源受限的平台,严重制约计数。
但是,静态变量存储在无论是.BSS
或.DATA
段(非明确初始化静态变量会去.BSS
,静态初始化静态变量会去.DATA
),堆栈。 编译器还可以利用这一点来进行一定的优化。
在典型的实现,与版本static
只会把字符串某处内存在编译的时候,而没有版本static
会使功能(每个这就是所谓的时间)分配堆栈上的部分空间,写串入该空间。
与版本static
,因此,
foo
是更大的东西)。 是的,性能是不同的:不像在每一次初始化自动存储变量,静态变量只初始化一次,第一次你去通过该功能。 如果foo
没有写入,没有其他区别。 如果它被写入时,改变静态变量调用之间生存,而改变自动变量打通功能连丢时间。
在方法定义一个静态变量仅仅意味着变量没有“出炉”,也就是说,它会继续在后续调用它的价值。 这可能会导致性能的改善取决于算法,但肯定不是本身并不构成一项性能改进。
是的,它使得不同,如果u有声明的变量为静态:
首先,存储器将在任一BSS或数据段,而不是堆叠进行分配。
其次,它会被初始化一次而已,不是每个不同的功能以外的变量,这必将创造差异时间。
第三,它保留了它的价值的B / W功能根据情况calls.So你应该使用它。