加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 10:06:54 所属栏目:百科 来源:网络整理
导读:我知道最好不要在C中使用寄存器变量,除非你有特殊的理由认为你做出了比现代编译器更好的决定. 由于局部静态变量在函数调用之间,因此在执行速度很重要时使用它们是否有意义? 我正在研究6502仿真器(仅用于娱乐和学习).大多数模拟操作根本不需要局部变量,但有
我知道最好不要在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个字节便宜.它与汇编指令序列相同.

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读