Je veux comprendre pourquoi le code suivant se comporte différemment sur mes machines linux et Windows 7 : Sur linux, il faut ~120ms par itération. Sur Windows 7, la première itération prend déjà 0,4 seconde et les itérations suivantes prennent beaucoup plus de temps. L'itération 8 prend déjà environ 11 secondes, l'itération 22 prend environ 1 minute.
J'ai observé ce comportement sur différents matériels. Il semble être lié à Windows.
#include <iostream>
#include <time.h>
#include <chrono>
void iteration() {
int n = 25000;
// Allocate memory
long** blocks = new long*[n];
for( int i = 0; i<n; ++i )
{
blocks[i] = new long[100008];
}
// Free all allocated memory
for( int i = 0; i<n; ++i )
{
delete[] blocks[i];
}
delete[] blocks;
}
int main(int argc, char **argv) {
int nbIter = 30;
for( int i = 0; i < nbIter; ++i )
{
auto start = std::chrono::system_clock::now();
iteration();
auto end = std::chrono::system_clock::now();
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
std::cout << "Iteration #" << i << ": time=" << elapsed.count() << "ms" << std::endl;
}
return 0;
}
Quelqu'un peut-il me dire ce qui se passe ici, et comment faire pour que le code fonctionne de manière stable sous Windows ?
edit : J'ai fait un release build dans VS2013 sur Windows, j'ai exécuté le programme en dehors de VS. Voici quelques temps d'exécution plus exacts (en secondes) :
Iteration #0: time=0.381000
Iteration #1: time=0.391000
Iteration #2: time=0.451000
Iteration #3: time=1.507000
Iteration #4: time=1.711000
Iteration #5: time=2.938000
Iteration #6: time=4.770000
Iteration #7: time=7.840000
Iteration #8: time=10.563000
Iteration #9: time=14.606000
Iteration #10: time=20.732000
Iteration #11: time=24.948000
Iteration #12: time=30.255000
Iteration #13: time=34.608000
Iteration #14: time=38.114000
Iteration #15: time=43.217000
Iteration #16: time=39.926000
Iteration #17: time=43.506000
Iteration #18: time=43.660000
Iteration #19: time=45.291000
Iteration #20: time=50.003000