我能得到最好的性能,从而使静态变量?(Can I get best performance maki

2019-07-29 07:42发布

为什么有些人做的事:

char baa(int x) {
    static char foo[] = " .. ";
    return foo[x ..];
}

代替:

char baa(int x) {
    char foo[] = " .. ";
    return foo[x ..];
}

看起来像Linux的源代码的应用非常普遍。 有性能上的差异? 如果是,有人可以解释为什么? 提前致谢。

Answer 1:

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

在函数变量是在栈上分配的,他们会被保留,并且每个函数被调用时删除,重要的是,他们会朝堆栈大小限制这是许多嵌入式和资源受限的平台,严重制约计数。

但是,静态变量存储在无论是.BSS.DATA段(非明确初始化静态变量会去.BSS ,静态初始化静态变量会去.DATA ),堆栈。 编译器还可以利用这一点来进行一定的优化。



Answer 2:

在典型的实现,与版本static只会把字符串某处内存在编译的时候,而没有版本static会使功能(每个这就是所谓的时间)分配堆栈上的部分空间,写串入该空间。

与版本static ,因此,

  • 很可能是更快
  • 可以使用更少的内存
  • 将使用较少的堆栈空间(其在一些系统是一种稀缺资源)
  • 将发挥与缓存更好(这是不太可能是一个大问题,一个小串,但如果可能是foo是更大的东西)。


Answer 3:

是的,性能是不同的:不像在每一次初始化自动存储变量,静态变量只初始化一次,第一次你去通过该功能。 如果foo 没有写入,没有其他区别。 如果它被写入时,改变静态变量调用之间生存,而改变自动变量打通功能连丢时间。



Answer 4:

在方法定义一个静态变量仅仅意味着变量没有“出炉”,也就是说,它会继续在后续调用它的价值。 这可能会导致性能的改善取决于算法,但肯定不是本身并不构成一项性能改进。



Answer 5:

是的,它使得不同,如果u有声明的变量为静态:

  1. 首先,存储器将在任一BSS或数据段,而不是堆叠进行分配。

  2. 其次,它会被初始化一次而已,不是每个不同的功能以外的变量,这必将创造差异时间。

  3. 第三,它保留了它的价值的B / W功能根据情况calls.So你应该使用它。



文章来源: Can I get best performance making static variables?