【发布时间】:2017-06-19 05:02:19
【问题描述】:
我知道最好不要在 C 中使用寄存器变量,除非您有特殊理由认为自己做出的决定比现代编译器做出的决定更好。
由于局部静态变量在函数调用之间存在,所以在执行速度很重要时使用这些变量是否有意义?
我正在开发一个 6502 模拟器(只是为了好玩和学习)。大多数模拟操作根本不需要局部变量,但有少数需要。我在下面粘贴了一个示例。基本上,我想知道将这些变量声明为静态是否有任何好处。不是为了在函数调用之间保留它们的值,而是为了防止它们的存储空间每次都被重新分配。这是另一种最好将其留给编译器的情况吗?
static void
op_asl_zero_page_x (CPU *cpu)
{
unsigned int result;
Word addr;
Byte b;
addr = zero_page_addr_XX (cpu, cpu->x);
b = bus_read (cpu->bus, addr);
/* Copy highest bit to carry */
cpu->status[CPU_STATUS_C] = ((b & 0x80) != 0);
result = (unsigned int)b << 1;
bus_store (cpu->bus, addr, result);
cpu_set_N_Z (cpu, result);
}
提前致谢:)
【问题讨论】:
-
但是
static和非静态变量有不同的语义?他们的一生是不同的。不完全可以互换。 -
这是另一个过早优化的案例。您只有在识别(毫无疑问)性能问题后才进行优化。也就是说,我认为堆栈指针更改多少字节对 CPU 来说并不重要,所以,不,局部变量(在典型的基于堆栈的实现中)并不慢。
-
将变量设为静态会使代码更难阅读、更难调试,并且会产生非常有趣的错误源。我非常怀疑潜在的速度改进(如果有的话!)能否抵消这些不利因素。
-
在没有考虑特定系统的情况下讨论优化是毫无意义的。
标签: c optimization static