C++数组值赋值时间

标签 c++ arrays time

我想知道在 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/

相关文章:

c++ - 在 C++ DLL 中使用全局变量

python - 在 Numpy 中为值对生成矩阵

C++ - 传递未知大小的数组

c# - CurrentCulture.DateTimeFormat.LongTimePattern 只读

c++ - printf 语句中的 0x%08lx 格式说明符到 cout

c++ - 只允许从 0 到 1 的数字

c - 当用户在 c 中完成输入时停止 for 循环

java - Android - 时间不更新

javascript - 在时间轴上使用 In Flot 中的标记

c++ - 在 C++ 中有条件地定义引用变量