Eğer önemli olan hız ise, son söyleneceğimi ilk söyleyeyim, cevap kesinlikle memset.
C++11 olanaklarını kullanarak küçük bir test yaptım.
#include <iostream>
#include <chrono>
int main(int argc, const char * argv[])
{
const int array_size = 200000;
double d1[array_size], d2[array_size], d3[array_size], d4[array_size];
std::chrono::high_resolution_clock::time_point t0 =
std::chrono::high_resolution_clock::now();
#if 0
std::fill(d1, d1 + array_size, 0.);
std::fill(d2, d2 + array_size, 0.);
std::fill(d3, d3 + array_size, 0.);
std::fill(d4, d4 + array_size, 0.);
#else
memset(d1, 0, array_size * sizeof(double));
memset(d2, 0, array_size * sizeof(double));
memset(d3, 0, array_size * sizeof(double));
memset(d4, 0, array_size * sizeof(double));
#endif
std::chrono::high_resolution_clock::time_point t1 =
std::chrono::high_resolution_clock::now();
std::chrono::milliseconds ms =
std::chrono::duration_cast<std::chrono::milliseconds>(t1 - t0);
std::cout << "The program has worked in " << ms.count() <<
" milliseconds\n";
return 0;
}
Benim makinemdeki sonuçlar şöyle:
std::fill = 5 veya 6 milisaniye
memset = 2 veya 3 milisaniye
Neredeyse iki katı fark var. Hatta daha da çok olabilir.
Benim için hız önemli olduğundan ben memset kullanmaya devam edeceğim.
Volkan Özyılmaz
No comments:
Post a Comment