컴파일 시스템이 어떻게 동작하는지 이해하는 것은 중요하다.
프로그램 성능 최적화
- 어떤 코드가 기계어로 어떻게 변환되는지 이해하면 성능 병목을 피하거나 최적화 할 방법을 더 잘 찾을 수 있음.
- switch 문은 if-else 문을 연속해서 사용하는 것보다 언제나 효율적인가?
- 함수 호출시 발생하는 오버헤드는 얼마나 되는가?
- while 루프는 for 루프보다 더 효율적인가?
- 포인터 참조가 배열 인덱스보다 더 효율적인가?
- 합계를 지역변수에 저장하면 참조형태로 넘겨받은 인자를 사용하는 것보다 왜 루프가 더 빨리 실행되는가?
- 수식 연산시 괄호를 단순히 재배치하기만 해도 함수가 더 빨리 실행되는 이유는 무엇인가?
디버깅과 문제 해결
- 링크 에러나 런타임 에러를 이해하고 해결하는데 도움 됨. 특히, 복잡한 시스템에서 문제를 진단할 때 컴파일 시스템 지식은 유효함.
- 링커가 어던 참조를 풀어낼 수 없다고 할 때는 무엇을 의미하는가?
- 정적변수와 전역변수의 차이는 무어신가?
- 만일 각기 다른 파일에 동일한 이름의 두 개의 전역 변수를 정의한다면 무슨 일이 일어나는가?
- 정적 라이브러리와 동적 라이브러리의 차이는 무엇인가?
- 컴파일 명령을 쉘에서 입력할 때 명령어 라인의 라이브러리들의 순서는 무슨 의미가 있는가?
- 왜 링커와 관련된 에러들은 실행하기 전까지는 나타나지 않는가?
보안
- 보안 약점은 종종 컴파일 또는 실행 단계에서 발생할 수 있음. 컴파일러가 어떻게 동자갛는지 이해하면 이러한 약점을 잘 이해하고 방어 가능.
- 버퍼 오버플로우 취약성이 인터넷과 네트워크 상의 보안 약점의 주요 원인임. 이 취약성은 프로그래머들이 신뢰할 수 없는 곳에서 획득한 데이터의 양과 형태를 주의깊게 제한해야 할 피룡를 거의 인시갛지 못하기 때문에 생겨남.
- 안전한 프로그래밍을 배우는 첫 단계는 프로그램 스택에 데이터와 제어 정보가 저장되는 방식 때문에 생겨나는 영향을 이해하는 것.
이식성과 호환성
- 다양한 플랫폼이나 언어로 코드를 이식할 때, 컴파일러가 어떤 자겅ㅂ을 수행하는지 알고 있으면 문제를 더 쉽게 예측하고 해결 할 수 있음
코드 품질
- 좋은 코드를 작성하는 것도 중요하지만, 그 코드가 어떻게 컴파일되고 실행되는지 이해하는 것은 코드 품질을 높이는데 도움이 됨.
학문적 이해와 직업적 능력향상
- 알고리즘을 효과적으로 구현하고 코드리뷰나 팀 프로젝트에서 더 깊은 통찰력을 제공.