Variables déclarées dans une boucle

Si je devais déclarer une variable à l’intérieur d’une boucle, est-il plus rapide d’avoir la déclaration en dehors de la boucle? Le programme réaffecte-t-il la mémoire pour n à chaque itération ou utilise-t-il toujours le même emplacement de mémoire?

 for(int i=0;i<10;i++) { int n = getNumber(); printf("%d\n",n); } 

contre

 int n; for(int i=0;i<10;i++) { n = getNumber(); printf("%d\n",n); } 

Les variables ne sont pas vraiment “créées” ou “détruites”. Ce sont des concepts au niveau de l’abstraction du langage de programmation. Le compilateur n’est pas obligé d’avoir un mappage un à un entre une variable et des adresses de mémoire. En pratique, la plupart du temps, l’espace de stack pour les variables locales est alloué en une fois au début de la fonction, ainsi les performances ne sont pas améliorées.

Notez que C ++, contrairement à C, qui n’a pas de notion pour les constructeurs, supporte la construction et la destruction d’object, donc si vous deviez définir une variable d’un type de classe dans une boucle for,

 class MyClass { public: MyClass() { cout << "hello world" << endl; } }; //... for (int i = 0; i < 10; ++i) { MyClass m; } 

vous appelez son constructeur à chaque fois, en imprimant effectivement "hello world" dix fois. Ceci est très différent des déclarations C et ne doit pas être confondu avec elle.

N’importe quel compilateur moderne les optimise avec le même code machine, vous ne devriez donc voir aucune différence.

Pour la plupart des compilateurs modernes, cela n’a pas d’importance. Ils assigneront des registres de processeur ou placeront les variables sur la stack le plus efficacement possible.