我正在运行下面的代码,它实际上没有做什么。它只是将2和4相加100万次,并输出运行时间。
#include "time.h"
#include <iostream>
using namespace std;
void add (){
int tot = 2+4;
}
void main(){
int t = clock();
int count = 0;
while(count<100000000){
int tot = 2+4;
count++;
}
cout <<endl<< "runtime = " << fixed <<(double) (clock() - t) / CLOCKS_PER_SEC <<"s" << endl;
但我很想看到在执行相同操作时调用函数所需的时间差异。因此,我将“int tot = 2+4”的行替换为“add()”。
我原本期望第二个运行时间会稍微长一点,但实际上比较长。第一个实现 = .3s
,第二个实现 = 3s
。
我知道调用函数需要使用堆栈来存储返回地址和存储本地数据。但是它一定做了很多更多的事情吗?
如果有人能够解释一下究竟是什么导致了运行时的巨大差异,或者我可能做了一些傻事,那就太好了。
-O3
)。如果没有打开优化选项,编译器甚至不会尝试生成快速代码 - 相反,它会添加一堆额外的指令,使调试更容易,但会减慢许多常见操作。特别是函数调用在-O0
下比-O3
慢得多。 - Crashworks