为什么有或没有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/