Aujourd'hui quelque chose d'étrange m'est venu à l'esprit. Lorsque je veux conserver une chaîne de caractères en C (C++) à l'ancienne, sans utiliser l'en-tête de chaîne, je crée simplement un tableau et stocke cette chaîne dans celui-ci. Mais, j'ai lu que toute définition de variable dans C dans la portée locale de la fonction finit par pousser ces valeurs sur la pile. Donc, la chaîne est en réalité 2 * plus grande que nécessaire. Parce que d'abord, les instructions push sont situées en mémoire, mais lorsqu'elles sont exécutées (poussées sur la pile), une autre "copie" de la chaîne est créée. D'abord les instructions push, que l'espace de la pile est utilisé pour une chaîne.Maintien des variables en mémoire, C++
Alors, pourquoi est-ce ainsi? Pourquoi le compilateur ajoute-t-il simplement la chaîne (ou d'autres variables) au programme au lieu de les créer à nouveau une fois exécuté? Oui, je sais que vous ne pouvez pas avoir certaines données dans le bloc de programme, mais cela pourrait juste être attaché à la fin du programme, avec quelques instructions de saut avant. Et que, nous ne ferions que pointer vers ces données? Parce qu'ils sont stockés dans la RAM lorsque le programme est exécuté.
Merci.
Je vous suggère de regarder ce que fait réellement la compilation dans votre débogueur en mode assembleur/source mixte en accédant à la fonction. Il ne génère pas d'instruction push pour chaque caractère, il va probablement simplement mémcpy() la chaîne d'initialisation dans l'espace réservé à la chaîne sur la trame de la pile - de toute façon ce sera une boucle, pas une instruction par caractère! – Clifford
Oui, mais mon exemple était juste. OK, disons par souci de précision, que j'ai un caractère ehm, "string". Pourtant, il est 2 fois en RAM après l'exécution. –