1. 실행파일 이미지

C/C++ 프로그램은 링커가 실행 파일을 만들면서 완성된다.


1. 텍스트 세그먼트

  - 코드 세그먼트라고 불린다. 프로그램에서 정의한 모든 함수의 기계어를 담고 있다.


2. 데이터 세그먼트 

  - 초기 값을 가진 전역 및 정적 변수가 자리한다.

  - 이 형태대로 프로그램이 실행 될 때 메모리에 배치되고 값들은 지정한 대로 초기화 돼있다. 따라서 실행 파일이 메모리에 로드될 때 전역변수와 정적 변수는 바로 사용할 수있다.


3. BSS 세그먼트 (block started by symbol)

  - 초기화 되지 않은 모든 전역변수와 정적변수가 자리한다.

  - C/C++에서는 초기화 되지 않은 전역변수와 정적변수가 0으로 초기화 되는데 몇개가 될지 모르는 0의 값들을 무작정 들고 있기 보다는 링커는 얼마나 많은 마이트의 0이 있는지만 기록한다.

  - 운영체제는 실행 파일이 메모리에 로드돼 시작점이 불리기 직전에 이 값을 보고 공간을 할당하고 0으로 채운다.


4. 읽기 전용 데이터 세그먼트

  - 읽기 전용(constant)인 전역 데이터가 자리한다. 부동 소수인 상수나, const 키워드로 정의된 전역 인스턴스 등이 여기에 해당한다.

  - 정수 타입인 상수는 매니페스트 상수처럼 취급돼 사용되는 기계어 코드위치에 직접 삽입되는 경우가 대부분이다.


5. 프로그램 스택

  - 프로그램이 메모리에 로드될 때 운영체제는 프로그램 스택이라는 메모리 공간을 마련한다.

  - 스택 프레임에는 세가지 종류가 저장된다.

   ⓐ 리턴주소 - 해당 함수를 호출한 곳(호출한 함수)의 주소인데, 이 함수가 리턴한 후 다음 실행될 프로그램 위치다.

   ⓑ CPU 레지스터 - 함수가 호출되기 이전의 레지스터 값들을 스택에 저장함으로써 함수는 이전의 상태를 훼손할 염려없이 레지스터를 자유롭게 사용할 수 있다.

   ⓒ 지역 변수 - 호출된 함수의 지역 변수들은 스택에 자리한다.


6. 동적 할당 힙

 동적으로 할당된 메모리는 힙에 올라간다. 6장에서 좀더 자세하게 다룬다.

'게임 엔진 아키텍처 > 3장 엔지니어링 기초' 카테고리의 다른 글

에러감지와 처리  (0) 2016.05.24
객체 메모리  (0) 2016.05.24
선언, 정의, 연결성  (0) 2016.05.24
멀티바이트 데이터와 엔디언  (1) 2016.05.24
수의 표현  (0) 2016.05.24
posted by 알쿠미