为什么有或没有const Modifier会使效率差异提高4倍?该代码需要大约16秒才能在我的PC中完成。但是,如果我做了一些小的更改,例如将mod声明为const int或在主体中移动mod声明,或者将i更改为int类型,则执行时间将减少至4秒。 (我使用带有默认参数的g++编译此代码)

Here是此代码的汇编代码,左侧部分使用non-const int mod生成,另一部分使用const int mod声明生成。

仅当我声明i为long long并且for循环中的运算符为'%'时,效率才大。否则,性能仅相差约10%。

// const int mod = 1000000009;
int mod = 1000000009;

int main(){
    // int mod = 1000000009;
    int rel = 0;
    for(long long i=1e9; i<2*(1e9); i++){
        rel = i % mod;
    }
    return 0;
}

最佳答案

当将mod的值从内存加载到寄存器时,生成的汇编代码是不同的。

例如,这是将Visual Studio 2013编译器用于基于x64的处理器时所获得的:

对于int mod = 1000000009:

mov  eax,dword ptr ds:[xxxxxxxxh]  ;  xxxxxxxxh = &mod
cdq
push edx
push eax

对于const int mod = 1000000009:
push 0
push 3B9ACA09h  ;  3B9ACA09h = 1000000009

关于c++ - 为什么有或没有const Modifier会使效率差异提高4倍?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27056402/

10-14 12:08