请教一个 C++问题,为什么加了 inline 反而效率降低了
老哥们,请教一下下面的程序是因为什么原因造成的?
#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 ?
请问是什么原因造成的啊?