Comprendre le comportement des adresses mémoire avec des variables et des constantes
Dans un extrait de code impliquant une variable const et un pointeur vers celle-ci, l'observation de différents les valeurs à la même adresse mémoire soulèvent des questions.
#include <iostream> using namespace std; int main() { const int N = 22; int * pN = const_cast<int*>(&N); *pN = 33; cout << N << '\t' << &N << endl; cout << *pN << '\t' << pN << endl; }
22 0x22ff74 33 0x22ff74
Pourquoi observer deux valeurs différentes (22 et 33) à la même adresse mémoire (0x22ff74) ?
Contrairement au constat, il n'y a pas deux valeurs différentes stockées à la même adresse mémoire. Ceci est le résultat des optimisations du compilateur.
Le compilateur a le pouvoir de traiter toute mention d'une variable const comme si la valeur de la variable au moment de la compilation était utilisée directement. Dans ce code, le compilateur considère le code comme :
int * pN = const_cast<int*>(&22); *pN = 33;
Le compilateur a le droit d'appliquer cette optimisation. Cependant, il est important de noter que le compilateur ne se limite pas à cette action. Il peut utiliser d'autres optimisations, y compris celles qui pourraient potentiellement effacer les données de votre disque dur si vous vous engagez dans des pratiques risquées telles que la modification de la mémoire associée aux variables const.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!