C函数中的静态局部变量会影响执行速度吗?

时间:2017-06-19 05:02:20

标签: c optimization static

我知道最好不要在C中使用寄存器变量,除非你有特殊的理由认为你做出的决定比现代编译器更好。

由于局部静态变量在函数调用之间徘徊,在执行速度重要时使用它们是否有意义?

我正在使用6502模拟器(仅用于娱乐和学习)。大多数模拟操作根本不需要局部变量,但有些操作根本不需要。我在下面粘贴了一个例子。基本上,我想知道将这些变量声明为静态是否有任何好处。不是在函数调用之间保留它们的值,而是为了防止每次重新分配它们的存储空间。这是另一种情况,将它留给编译器是最好的吗?

bar

提前致谢:)

2 个答案:

答案 0 :(得分:7)

在典型的x86系统中,当您输入函数时,为局部变量保留空间不会产生额外的计算成本。

输入函数意味着移动堆栈指针。将它移动8个字节并不比移动16个字节便宜。它与汇编指令序列相同。

在堆栈中使用更多的内存,但除非你打算做一些严重的深度递归,否则你不必担心。所有这一切都假设您的编译器实际上决定使用堆栈来存储这些变量的内容(它们可能被映射到寄存器)。

因此,就计算而言,没有成本。在记忆方面,成本非常低。

答案 1 :(得分:0)

我认为将函数声明为static只是告诉编译器这个函数只能在当前文件(xxx.o)中使用,并且没有其他好处。