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

Tim*_*son 3 c optimization static

我知道最好不要在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);
}
Run Code Online (Sandbox Code Playgroud)

提前致谢 :)

sle*_*ica 7

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

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

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

所以,就计算而言,没有成本.在内存方面,成本非常低.

  • 除此之外:`static`存储持续时间意味着变量在程序的完整执行时间内存在,因此如果变量无法优化其使用,编译器将需要在内存中存储/访问该变量.没有`static`,可以使用寄存器. (2认同)