首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >与0进行比较与与值进行比较是否更快?

与0进行比较与与值进行比较是否更快?
EN

Stack Overflow用户
提问于 2019-07-13 00:46:58
回答 1查看 282关注 0票数 2

这些循环中的一个比另一个快吗?我一直使用#2,认为与汇编中的值相比,与零比较会更快,因为CMP指令执行起来更简单,但查看一些ARM手册,我看不到任何东西来证实这一点。它依赖于你使用的指令集和处理器吗?这是真的吗?

代码语言:javascript
复制
//#1
while(1)
    {
        static uint8_t counter = 0;
        counter++;
        if(counter == 4)
        {
            counter = 0;
            //do something
        }
    }


//#2
while(1)
    {
        static uint8_t counter = 4;
        counter--;
        if(counter == 0)
        {
            counter = 4;
            //do something
        }
    }
EN

回答 1

Stack Overflow用户

发布于 2019-07-15 08:34:57

很难说。专注于发布模式的构建,这在很大程度上取决于上下文,而你并没有给出所有的东西,特别是缺失的循环中断条件使得它不可能弄清楚。

通常,如果迭代次数是立即值,只要循环中没有循环计数器依赖项,编译器就会将循环结构转换为快速倒计时到零。

无论如何,在像Cortex-A系列这样的现代超标量体系结构上,像cmp这样的简单算术逻辑单元指令将被很好地“隐藏”,因此在大多数情况下不会花费额外的周期。

实际上,对性能影响更大的是counterstatic声明,它会自动转换为内存RW。如果可能,请避免这种情况。

此外,如果您只是希望do something每四次迭代运行一次,那么if ((counter & 3) == 0)可能是更好的解决方案,它可以删除计数器重置。同样,这完全取决于你没有提供的上下文(“做某事”的长度)。

作为附注,局部变量最好是32位变量,除非你有充分的理由声明它们,因为任何较少的变量都可能转换为额外的模相关指令,如uxtband等。

将循环计数器倒数到零是不费吹灰之力的,但如果您想要获得最高性能,还需要考虑更多的事情。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57011061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档