将较短的数据类型写入内存不会影响运行时间吗?

时间:2016-05-31 21:36:49

标签: c++ c++11 memory int benchmarking

我一直在比较几种数据类型的写入时间,并且我注意到了一些我觉得非常困惑的事情。首先,这是我的代码:

#include <iostream>
#include <array>
#include <ctime>

#define its 1000000
#define len 1000

int main()
{
    std::array<int, len> int_arr;
    std::array<char, len> char_arr;
    std::array<bool, len> bool_arr;
    std::clock_t begin = std::clock();
    for (int i = 0; i < its; ++i)
    {
        std::fill(int_arr.begin(), int_arr.end(), 0);
    }
    std::clock_t end = std::clock();
    double elapsed = double(end - begin) / CLOCKS_PER_SEC;
    std::cout << "int_arr " << elapsed << std::endl;
    begin = std::clock();
    for (int i = 0; i < its; ++i)
    {
        std::fill(char_arr.begin(), char_arr.end(), 0);
    }
    end = std::clock();
    elapsed = double(end - begin) / CLOCKS_PER_SEC;
    std::cout << "char_arr " << elapsed << std::endl;
    begin = std::clock();
    for (int i = 0; i < its; ++i)
    {
        std::fill(bool_arr.begin(), bool_arr.end(), false);
    }
    end = std::clock();
    elapsed = double(end - begin) / CLOCKS_PER_SEC;
    std::cout << "bool_arr " << elapsed << std::endl;
}

此代码比较写入包含不同数据类型的数组所花费的时间(重复填充是为了使运行时具有可测量性)。我希望charbool花费大致相同的时间,因为计算机仍然必须将完整的字节写入RAM。此外,由于int占用4个字节,我希望它运行速度慢四倍 我用-O3优化器标志和-std=c++11编译了上面的代码。与我的期望相反,结果差别很大!正如预期的那样,charbool一致地花费相同的时间(并且运行之间的时间也相同)。但是,大约一半的时间int只是慢两倍(在这种情况下,因数为2.19):

int_arr 0.043705
char_arr 0.01995
bool_arr 0.022835

另一半时间,它慢了四倍(在这种情况下,系数为3.91):

int_arr 0.076907
char_arr 0.01965
bool_arr 0.019354

此外,它介于两者之间!这到底是怎么回事?非常感谢您的解释!

0 个答案:

没有答案