컴파일러
최적화를 적용해 컴파일한 프로그램을 디버거로 조사하면 일부 변수의 값이 "표시할 수 없음"으로 나오는 경우가 있다. 주된 이유는 무엇인가?
- A최적화를 적용하면 디버거가 프로그램을 전혀 읽어 들이지 못하게 되기 때문
- B변수의 값이 컴파일할 때마다 무작위로 바뀌기 때문
- C값이 레지스터 재사용이나 계산의 삭제로 남아 있지 않기 때문
정답과 해설 보기
정답: C. 값이 레지스터 재사용이나 계산의 삭제로 남아 있지 않기 때문
최적화에서는 변수를 메모리에 두지 않고 레지스터만으로 다루다가, 다 쓰고 나면 그 레지스터를 다른 값에 재사용합니다. 상수 전파로 계산 자체가 사라지기도 합니다. 그래서 디버거로 멈춘 시점에는 이미 그 변수의 값이 어디에도 남아 있지 않은 경우가 있으며, "최적화로 삭제됨" 등으로 표시됩니다. 디버깅할 때는 최적화를 약하게 하거나 디버그용 최적화 설정을 사용하는 것이 일반적입니다. 디버거가 읽어 들이지 못하게 되는 것은 아닙니다.
- A. 디버거는 최적화된 프로그램도 읽어 들일 수 있습니다.
- B. 값이 무작위로 바뀌는 것이 아닙니다.
- C. 올바릅니다. 레지스터 재사용이나 계산의 삭제로 값이 남아 있지 않기 때문입니다.