변수와 상수를 사용한 메모리 주소 동작 이해
const 변수와 이에 대한 포인터가 포함된 코드 조각에서 서로 다른 관찰 동일한 메모리 주소에 값이 있으면 의문이 생깁니다.
#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
왜 우리는 동일한 메모리 주소에서 두 개의 다른 값(22 및 33)을 관찰합니다. (0x22ff74)?
관찰과 달리 동일한 메모리 주소에 서로 다른 두 값이 저장되어 있지 않습니다. 이는 컴파일러 최적화의 결과입니다.
컴파일러는 const 변수에 대한 언급을 마치 변수의 컴파일 시간 값이 직접 사용되는 것처럼 처리할 권한이 있습니다. 이 코드에서 컴파일러는 코드를 다음과 같이 간주합니다.
int * pN = const_cast<int*>(&22); *pN = 33;
컴파일러는 이 최적화를 적용할 권한이 있습니다. 그러나 컴파일러는 이 작업으로 제한되지 않는다는 점에 유의하는 것이 중요합니다. const 변수와 관련된 메모리 수정과 같은 위험한 관행에 참여할 경우 하드 드라이브의 데이터를 잠재적으로 지울 수 있는 최적화를 포함하여 다른 최적화를 사용할 수 있습니다.
위 내용은 `const` 변수의 메모리 주소를 수정하면 다른 값이 표시되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!