老哥们,请教一下下面的程序是因为什么原因造成的?
#include <iostream>
#include <chrono>
using namespace std;
class Runtime{
private:
std::chrono::high_resolution_clock::time_point _start, _end;
public:
Runtime(){
start();
}
void start(){
_start = std::chrono::high_resolution_clock::now();
}
void end() {
_end = std::chrono::high_resolution_clock::now();
}
long long spend() {
return std::chrono::duration_cast<std::chrono::nanoseconds>(_end - _start).count();
}
void printTime() {
end();
std::cout << "time = "
<< spend()/1000000 << "/ms = "//毫秒
<< spend()/1000 << "/us = "//微秒
<< spend() << "/ns" << std::endl;//纳秒
}
};
const int N = 1e5;
int x[N];
int y[N];
int z[N];
//inline
int calc(int a, int b) {
return a + b;
}
int main(){
Runtime r;
for (int i=0; i<N; ++i) {
for (int j=0; j<N; ++j) {
for (int k=0; k<N; ++k)
z[i] = calc(y[j], x[k]);
//z[i] = y[j] + x[k];
}
}
r.printTime();
}
加了 inline 比不加慢一倍,不是说 inline 会减少函数压栈出栈的时间开销,相当于直接在调用点插入代码嘛,但是,实际上开销比不加 inline 慢一倍,不加 inline 的开销和下面注释的那句的开销差不多。感觉很奇怪,难道是编译器自动添加了 inline ?
请问是什么原因造成的啊?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.