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);
}

提前致谢:)

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

输入函数意味着移动堆栈指针。移动 8 个字节并不比移动 16 个字节便宜。这是相同的组装指令序列。

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

因此,在计算方面,没有成本。在内存方面,成本非常低。

我认为将

函数声明为静态只是告诉编译器此函数只能在当前文件(xxx.o(中使用,并且没有其他好处。

最新更新