我的任务是两个程序,这是第二个程序。第一个程序不涉及计算()函数,并在程序启动和完成时对程序计时。我的电脑将显示从.523秒到.601秒的任何内容。
第二个任务是为计算创建一个内联函数,我相信我做错了因为它不是更快。我不确定我是否使计算功能正确,因为它包含显示信息,或者内联函数应仅关注乘法。无论哪种方式将数组拉出main并进入函数都不会更快。
编译器是否只是忽略它?
#include <ctime>
#include <iostream>
using namespace std;
inline int calculation(){
int i;
double result[10000];
double user[10000];
for(i=0; i<10000; i++){
user[i]=i+100;
}
double second[10000];
for(i=0; i<10000; i++){
second[i]=10099-i;
}
for (i = 0; i < 10000; i++){
result[i] = user[i] * second[i];
}
for (i = 0; i < 10000; i++){
cout << user[i] << " * " << second[i] << " = " << result[i] << '\n';
}
}
int main() {
time_t t1 = time(0); // get time now
struct tm * now = localtime( & t1 );
cout << "The time now is: ";
cout << now->tm_hour << ":" << now->tm_min << ":" << now->tm_sec << endl;
clock_t t; // get ticks
t = clock();
cout << " Also calculating ticks...\n"<<endl;
calculation(); // inline function
time_t t2 = time(0); // get time now
struct tm * now2 = localtime( & t2 );
cout << "The time now is: ";
cout << now2->tm_hour << ":" << now2->tm_min << ":" << now2->tm_sec << endl;
time_t t3= t2-t1;
cout << "This took me "<< t3 << " second(s)" << endl; // ticks
t = clock() - t;
float p;
p = (float)t/CLOCKS_PER_SEC;
cout << "Or more accuratley, this took " << t << " clicks"
<< " or " << p << " seconds"<<endl;
}
答案 0 :(得分:1)
编译器是否只是忽略它?
最有可能,是的。可能这样做有两个原因:
inline
关键字以便于调试。inline
关键字是编译器 HINT ,而非强制性要求。这是程序员推荐编译器内联函数的方式,就像发布模式下的编译器经常内联函数以提高性能一样。如果它只看到负值,则不符合。另外,在单次调用的情况下,无论是否有效,您都不太可能看到差异。 CPU上的单个本机函数调用比OS级别的单个任务切换更容易。
答案 1 :(得分:0)
您应该禁用优化以验证您所执行的操作是否有任何影响,因为编译器很可能已经自行内联函数。
此外,如果您想确切知道代码的作用,您应该使用g ++中的-s标志进行编译,并查看编译器为您的程序生成的程序集。这将消除编译器对您的程序所做的所有不确定性。
答案 2 :(得分:0)
我不会将函数内联并将数组定义为静态。例如
int calculation(){
int i;
static double result[10000];
static double user[10000];
for(i=0; i<10000; i++){
user[i]=i+100;
}
static double second[10000];
for(i=0; i<10000; i++){
second[i]=10099-i;
}
for (i = 0; i < 10000; i++){
result[i] = user[i] * second[i];
}
for (i = 0; i < 10000; i++){
cout << user[i] << " * " << second[i] << " = " << result[i] << '\n';
}
}