C/C++ 메모리 레이아웃
Text segment
- 기계어로 변환된 실행코드가 메모리 or obj에 저장
Data segment
- 초기화된 전역변수(global) 및 정적변수(static)
Block Started by Symbol(BSS) segment
- 비초기화된 전역변수 및 정적변수
- OS 커널에서 산술적 값 0으로 초기화 혹은 explicit 초기화 없이 유지
Stack
- 지역변수 및 매개변수
- 스코프 벗어나면 해제
- 크기에 제한이 있음
- 너무 큰 데이터는 저장 불가
- CPU가 자동으로 처리
Heap
C/C++ 프로그램이 작동하는 순서
- 코드 작성
- 프로그램이 수행할 코드를 텍스트로 개발자가 작성
- 컴파일
- 텍스트 파일인 소스 코드가 바이너리/오브젝트 파일로 변환
- .o 파일로 저장
- 기계어로 변환되는 과정
- Lexical analysis (Scanning)
- Syntax analysis (Parsing) 언어 규칙 체크
- 토큰이 언어 규칙에 따라 트리를 형성
- expression이 valid한지를 체크
- Semantic analysis (Analyzing) 코드 체크
- 선언된 함수나 변수를 체크
- 호출된 함수의 파라미터 수와 return type을 체크
- 신택스 분석과 시맨틱 분석이 실패하면 컴파일 에러를 생성
- 링크
- 각 모듈별로 생성된 오브젝트 파일을 연결
- .a나 .exe 파일을 최종적으로 생성
- 각 오브젝트 파일이나 라이브러리를 실행가능한 파일 또는 라이브러리로 변환하는 것
- 코드 생성
- 실행
출처