我一直在比较几种数据类型的写入时间,并且我注意到了一些我觉得非常困惑的事情。首先,这是我的代码:
#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;
}
此代码比较写入包含不同数据类型的数组所花费的时间(重复填充是为了使运行时具有可测量性)。我希望char
和bool
花费大致相同的时间,因为计算机仍然必须将完整的字节写入RAM。此外,由于int
占用4个字节,我希望它运行速度慢四倍
我用-O3
优化器标志和-std=c++11
编译了上面的代码。与我的期望相反,结果差别很大!正如预期的那样,char
和bool
一致地花费相同的时间(并且运行之间的时间也相同)。但是,大约一半的时间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
此外,它介于两者之间!这到底是怎么回事?非常感谢您的解释!