본문 바로가기

Cpp

프로그램의 실행 과정 메모리 구조

메모리(Memory)

데이터를 기록하거나 읽기 위한 저장공간이다.
 램(RAM)과 롬(ROM), 플래시 메모리로 나눌 수 있다.

램(RAM) : 읽고 쓰기가 가능한 주 기억장치이다.

전원 종료시 데이터가 사라지는 휘발성 메모리이다.

 

롬(ROM) : 저장된 내용을 읽을 수 만 있는 기억장치.

비휘발성 메모리이다. 변경을 하지 않는 소프트웨어를 저장하는데 이용한다.

 

프로그램의 실행 과정

 

전처리기 -> 컴파일러 -> 목적코드 -> 링커(목적코드와 라이브러리, 시동코드를 링크하는 과정) -> 실행코드(실행파일)

 

메모리의 구조

프로그램이 실행되기 위해서는 먼저 프로그램이 메모리에 로드되어야 한다.

또한, 프로그램에서 사용되는 변수들을 저장할 메모리도 필요하다.

 

운영체제는 다양한 메모리 공간을 제공한다.

 

1. 코드영역

2. 데이터영역

3. 스택영역

4. 힙영역

 

1. 코드 영역

메모리의 코드(code) 영역은 실행할 프로그램의 코드가 저장되는 영역으로 텍스트(code) 영역이라고도 부릅니다.

CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리하게 됩니다.

 

2. 데이터영역 / BSS 영역

메모리의 데이터(data) 영역은 프로그램의 전역 변수와 정적(static) 변수가 저장되는 영역입니다.

데이터 영역은 프로그램의 시작과 함께 할당되며, 프로그램이 종료되면 소멸합니다.

전역변수와 정적변수를 선언할 때 값을 초기화했으면 Data 영역에 생성되고, 초기화하지 않았으면 BSS 영역에 생성된다. 

BSS 영역은 프로그램 실행을 시작하기 전에 OS 커널에 의해 0으로 자동 초기화

3. 스택영역

메모리의 스택(stack) 영역은 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역입니다.

스택 영역은 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸합니다.

이렇게 스택 영역에 저장되는 함수의 호출 정보를 스택 프레임(stack frame)이라고 합니다.

스택 영역은 푸시(push) 동작으로 데이터를 저장하고, 팝(pop) 동작으로 데이터를 인출합니다.

이러한 스택은 후입선출(LIFO, Last-In First-Out) 방식에 따라 동작하므로, 가장 늦게 저장된 데이터가 가장 먼저 인출됩니다.

스택 영역은 메모리의 높은 주소에서 낮은 주소의 방향으로 할당됩니다.

스택 영역이 힙영역을 넘어가면 스택 오버플로우가 발생합니다.

 

4. 힙영역

메모리의 힙(heap) 영역은 사용자가 직접 관리할 수 있는 메모리 영역입니다.

힙 영역은 사용자에 의해 메모리 공간이 동적으로 할당되고 해제됩니다.

힙 영역은 메모리의 낮은 주소에서 높은 주소의 방향으로 할당됩니다.

힙 영역이 스택 영역을 넘어가면 힙 오버플로우가 발생합니다.

 

 

출처 : 

http://www.tcpschool.com/c/c_memory_structure

'Cpp' 카테고리의 다른 글

추상클래스  (0) 2023.02.27
외부링크 내부링크  (0) 2023.02.23
변수주기  (0) 2023.02.23
Static  (0) 2023.02.23
스택 프레임(stack frame)  (0) 2023.02.23