Initialisation des variabes auto et globales en C

Si je comprends bien, les variables globales (qui vont dans le segment de données) en C sont initialisées, alors que les variables automatiques (qui vont dans la stack) ne le sont pas. ou peut-être l’inverse?

Pourquoi est-ce? Quel est le mérite du compilateur de ne pas initialiser les deux types de variables? Cela augmente-t-il la vitesse, etc.?

Comme vous le dites, les variables globales vont dans le segment de données, de sorte que leur valeur est contenue dans l’exécutable final. Il peut également s’agir d’une valeur initialisée, car il n’y a aucune différence de performance.

D’autre part, les variables locales sont allouées à la stack, qui est configurée au moment de l’exécution, de sorte que leur initialisation aurait un impact sur les performances.

Vous comprenez bien, les globales sont initialisées, les auto ne le sont pas. Cela est dû au fait que les globales sont chargées directement à partir de l’image binary du programme et que l’initialisation est “libre”, alors que les auto sont sur la stack et que le code doit être exécuté pour modifier les valeurs et les initialiser (par exemple, la performance).