我明白,最好不要在C中使用寄存器变量,除非你有特别的理由认为你正在做出比现代编译器更好的决定。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);
}
感谢提前:)
但'静态'和非静态变量有不同的语义?他们的一生是不同的。不完全可以互换。 –
这是*过早优化*的另一种情况。您只在*确定*(无疑)性能问题后才进行优化。也就是说,我认为CPU的堆栈指针改变了多少字节并不重要,因此,不,局部变量(在典型的基于堆栈的实现中)不会变慢。 –
使变量静态会使代码更难阅读,更难以调试,并会创建一个非常有趣的错误来源。我非常怀疑潜在的速度改进(如果有的话)可以弥补这些缺点。 – zoul