본문 바로가기

Architecture for Software/C and C++

ANSI C 호환 컴파일러의 환경에 대하여

평소 C나 C++는 자주 사용하지 않지만 간혹 사용할 경우가 많아서 최근 개념을 다잡고자 "Pointers on C"라는 책을 읽고 있습니다.

책 내용중 기본 개념에 해당하는 ANSI C 호환 컴파일러의 환경에 대한 좋은 글이 있어서 올립니다.

모든 ANSI C 호환 컴파일러는 두개의 서로 다른 환경(Environment)이 존재한다.

1. 번역 환경 (Translation Environment): 소스코드를 실행 가능한 기계어로 번역하는 환경
2. 실행 환경 (Execution Environment): 코드를 실제로 실행하는 환경

이 두 환경은 모두 하나의 동일한 컴퓨터에 존재할 필요가 없다.
특히 다른 CPU나 운영체제를 사용하는 경우 번역환경과 실행 환경은 서로 상이할 수 있다.

예를 들어 Windows XP를 사용하는 개발자가 UNIX에서 돌아가는 C 프로그램을 작성한다고 하면 번역환경은 Windows XP를 사용하는 개발자의 컴퓨터이고 실행환경은 UNIX 머신이다.

이를 위하여 크로스 컴파일러(Cross Compiler)가 존재하여 현재 자신이 실행되는 컴퓨터에서 그와 다른 컴퓨터에서 실행될 수 있는 실행코드를 만들어 낼 수 있다. 이 경우 번역환경은 존재하지만 실행환경은 존재하지 않는다.

또한 환경에 따라 운영체제가 필요하지 않을 수 있다.

운영체제가 없는 환경을 프리스탠딩 환경(Freestanding Environment)라고 하는데, 전자랜지와 같은 임베디드 시스템에서 볼 수 있다.