我想知道在 C++ 中为数组分配一个值需要多长时间。
我测试了一个分配数组 arr = 0 的代码,然后,如果 arr> 20,则 arr 更改值。
#include<iostream>
#include < windows.h >
using namespace std;
#define N 100000000
int arr[N] = { 0, };
int main(){
int d;
int *data;
data = arr;
double start = GetTickCount();
for(int i = 0; i < N; i++){
if (data[i] > 20){ //All data is zero
// d = data[i];
data[i] = 10;
}
}
double end = GetTickCount();
cout << (end - start) / (double)1000 << endl;
return -1;
}
我认为没有数据分配给arr,
因为所有的数据都小于20,
所以计算时间应该接近于0。但计算时间为0.188s。
是什么原因?
环境:visual studio 2013社区
编译选项(优化):/O2(0.188s),/Ox(0.141)
最佳答案
你在一点上是对的:在你的程序中,分配所花费的总时间为 0。 但是该程序并没有简化为赋值,它还包含测试(并且在较低级别跳转以允许循环和条件)。在这里你要求 100000000 次测试......
当然,正常人可以很容易地推断出,由于数组被初始化为 0,并且从未被修改,所以所有测试都将返回 false,并且循环只是一个空操作,可以被优化掉。但不幸的是,这对于大多数编译器来说太复杂了,恕我直言,大多数编译器只会执行所有测试,这会花费观察到的持续时间。
关于C++数组值赋值时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47432368/