gpt4 book ai didi

用于 10000 的数组乘法的 c++ 内联函数

转载 作者:行者123 更新时间:2023-11-28 07:12:52 31 4
gpt4 key购买 nike

我负责两个项目,这是第二个。第一个程序不涉及 calculation() 函数,并在程序开始和结束时计时。我的计算机将显示从 0.523 秒到 0.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;

}

最佳答案

Is the compiler just ignoring it?

很可能是的。这样做可能有两个原因:

  • 您正在 Debug模式下进行编译。在 Debug模式下,所有 inline 关键字都将被忽略以方便调试。
  • 忽略它是因为该函数对于内联函数来说太长了,并且使用了太多的堆栈空间来安全地内联,并且只被调用一次。 inline 关键字是一个编译器HINT,不是强制要求。这是程序员建议编译器内联函数的方式,就像处于 Release模式的编译器会经常自行内联函数以提高性能一样。如果它只看到负值,它就不会遵守。

此外,考虑到单一调用,无论它是否有效,您甚至都不太可能看到差异。与操作系统级别的单个任务切换相比,CPU 上的单个 native 函数调用要容易得多。

关于用于 10000 的数组乘法的 c++ 内联函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20714022/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com