Ich testete mein Programm und einmal entscheiden, BOOST_FOREACH
Makros zu den einfachen for
Zyklus mit const_iterator
zu ändern.Wer ist schneller: BOOST_FOREACH Makros oder für
und ich erhalte unerwartetes Ergebnis: Programm arbeitet langsamer mit for
.
Dann schrieb ich kleinen Test App:
std::vector<int> vec;
for (int i = 0; i != 50000000; ++i)
vec.push_back(i);
time_t t1 = clock();
int sum1 = 0;
for (std::vector<int>::const_iterator it = vec.begin(); it != vec.end(); ++it)
sum1 += *it;
std::cout << ulong(clock() - t1);
time_t t2 = clock();
int sum2 = 0;
BOOST_FOREACH(auto &it, vec) {
sum2 += it;
}
std::cout << ulong(clock() - t2);
hier ausgegeben:
34963
26964
Warum so?
geschieht Sie sollte es laufen viel mehr als ein Mal pro und es im Release-Modus laufen. –
Probieren Sie es mit '-O3'-Optimierungsstufe aus (vermutlich ist dasselbe mit dem obigen Kommentar gemeint). Sie cachen auch 'vec.end()' in der ersten Schleife nicht – Smeeheey
In solchen Fällen vergleichen Sie einfach generierte Assembly-Auflistungen. 99% sagt, dass das Ergebnis nach Optimierungen identisch sein wird – sehe