4334
2014-03-15 15:28:29
2
0. 위의 코드 변환은 컴파일러가 코드를 최적화 하는 과정에서 발생한 것으로, 컴파일러마다 다릅니다.
1. 일반적인 프로그램은 세 종류의 메모리 영역을 가집니다. 각각 프로그램영역(기계어 영역), 상수 역역, 그리고 동적 할당되는 힙 영역입니다. 콜 스택은 힙 영역에 생성되기는 하지만, 프로그래머가 관리할 수 없으므로 분리해서 생각하는 경우도 많습니다. 혹은 큼직하게 힙영역과 코드 영역 두개로만 가르기도 합니다.
2. 변수명은 기계어(혹은 바이트코드)로 컴파일시 모두 메모리 주소로 변환되어 기계어 코드(OP코드)의 인수로 지정됩니다. 상수 영역에 있는 특정 상수 또한 기계어 코드 상에 메모리주소 인수로 들어갑니다.(컴파일된 기계어 코드에서 모든 자료는 메모리에 있고, 이에 대한 주소만 가지고 있습니다.)
(일부 바이트 코드의 경우 디버그를 위해 변수명을 남겨 놓기도 합니다만, 실행될때는 사용되지 않습니다.)
3. 이러한 메모리 주소의 크기는 OS의 bit 수와 같습니다.
4. 기계어 코드(OP 코드)는 항상 정해진 길이의 인수만 받을 수 있기 때문에(1바이트 짜리 변수의 연산을 해도 4바이트 짜리 int 연산과 동일한 명령어를 소요합니다.) 변수명 길이는 무의미 합니다.
5. 변수명을 적절한 메모리 주소로 변환하는 것 또한 컴파일러의 일입니다. 이 부분은 OS 설계와 컴파일러 설계에서 정확히 배울 수 있습니다.