Я тоже задумался над этим и написал небольшой тест:
#include <iostream>
#include <chrono>
template<typename numType>
void test(void) {
std::cout<< "Size of variable: " << sizeof(numType) << std::endl;
numType array[20000];
auto t1 = std::chrono::high_resolution_clock::now();
// fill array
for( numType& number : array ) {
number = 1.0014535;
}
auto t2 = std::chrono::high_resolution_clock::now();
// multiply each number with itself 10.000 times
for( numType& number : array ) {
for( int i=0; i < 10000 ; i++ ) {
number *= number;
}
}
auto t3 = std::chrono::high_resolution_clock::now();
auto filltime = t2 - t1;
auto calctime = t3 - t2;
std::cout<< "Fill time: " << filltime.count() << std::endl;
std::cout<< "Calc time: " << calctime.count() << std::endl;
}
int main(int argc, char* argv[]) {
test<float>();
test<double>();
}
Я запустил и скомпилировал его под Ubuntu 12.04 x64, используя GCC на процессоре Intel i7 3930k
Это были результаты:
Size of variable: 4
Fill time: 69
Calc time: 694303
Size of variable: 8
Fill time: 76
Calc time: 693363
Результаты были воспроизводимы. Таким образом, выделение памяти для double занимает немного больше времени, но фактическое время расчета точно такое же.
Из любопытства я также запустил и скомпилировал его под Windows 7 x64, используя Visual Studio 2012 в режиме выпуска на процессоре Intel i7 920
(Единица времени отличается, поэтому не сравнивайте приведенные выше результаты с этими: она действительна только для внутреннего сравнения)
Size of variable: 4
Fill time: 0
Calc time: 3200183
Size of variable: 8
Fill time: 0
Calc time: 3890223
Результаты были воспроизводимы.
Похоже, что распределение окон происходит мгновенно, возможно, потому что linux на самом деле не дает вам память, пока вы не используете ее, в то время как Windows просто передает все это вам сразу, требуя меньше системных вызовов. Или возможно назначение оптимизировано далеко.
Умножение удваивается здесь на 21,5% медленнее, чем для чисел с плавающей точкой. Эта разница с предыдущим тестом, вероятно, связана с другим процессором (по крайней мере, это мое лучшее предположение).