改动了一下测试函数, 搞成初始化一半的空间.
居然性能真的介于 初始化和不初始化之间. 我严重怀疑这是 uncommited memory搞得鬼。
void test_R3_performance()
{
clock_t latest_value = clock();
std::vector<R3> vv(POPULATION); // <--- uninitialized vector
//std::vector<R3> vv(POPULATION , R3{ 0, 0, 0 });
for (int i = 0; i<POPULATION/2; ++i) // <-------- key code!
vv[i] = {0, 0, 0};
time_report("allocation finished", latest_value);
for (int i = 0; i<POPULATION; ++i)
{
vv[i] = {(double)i*2, (double)i + 4, (double)i + 6};
}
time_report("assignment finished", latest_value);
}
【 在 ziqin 的大作中提到: 】
: 你看下编译出来的机器码,我猜是初始化的时候因为assigment,所以m_data[3]全部进入缓存了,类似pre-fetch,后面访问起来就快。如果用default ctor初始化(并不是没有初始化,是用default ctor初始化),default ctor里并没有访问m_data[3],所以没有进入缓存
--
FROM 120.244.224.*