공부용 블로그 | seokmin100
Nefus - C언어 [메모리 구조] 본문
메모리 구조
프로그램이 실행되기 위해서는 먼저 프로그램이 메모리에 로드(load)되어야 한다.
또한, 프로그램에서 사용되는 변수들을 저장할 메모리도 필요하다.
따라서 컴퓨터의 운영체제는 프로그램의 실행을 위해 다양한 메모리 공간을 제공하고 있다.
메모리 공간
1. 코드 영역
2. 데이터 영역
3. 스택 영역
4. 힙 영역
1. 코드(Code) 영역
'코드 영역'에서는 프로그램의 코드가 기계어 형태로 저장된다.
그리고 저장된 코드는 실행 중간에 코드를 바꿀 수 없게 읽기 전용으로
저장되어 있다.
2. 데이터(Data) 영역
'데이터 영역'에서는 전역 & 정적 변수가 저장된다.
이는 프로그램이 시작될 때 할당되고 프로그램이 종료될 때 소멸된다.
- 전역 변수 : 어떤 변수 영역 내에서도 접근할 수 있는 변수를 의미한다. 즉, 함수 밖에 선언되어 있는 변수이다. - 정적 변수 : 특정 함수에만 사용가능하면서도 값이 유지되는 변수를 의미한다. 즉, 프로그램이 끝날 때까지 변수 안의 값이 유지된다. |
3. 스택(Stack) 영역
'스택 영역'에서는 함수의 지역변수와 매개변수, 반환 주소값이 저장되는 영역이다.
그러하여 함수 호출 시 할당하고, 호출 완료시 소멸된다.
후입선출(LIFO) 방식을 사용한다. 즉, 높은 주소 -> 낮은 주소로 이동한다.
- 지역 변수 : 프로그램 내의 변수가 선언된 함수에서만 사용 가능한 변수를 의미한다. 함수가 시작한 때 메모리가 할당되고 함수가 끝날 때에 메모리가 해제된다. - 매개 변수 : 함수를 호출할 때 인수로 전달된 값을 함수 내부에서 사용할 수 있게 해주는 변수를 의미한다. 예를 들어 'int func(int a, int b)'이란 함수가 있을 때 변수 a, b 부분이 매개 변수에 해당한다. |
4. 힙(Heap) 영역
'힙 영역'은 사용자가 필요할 때마다 사용하는 메모리 영역이다.
malloc(), calloc(), realloc()과 같은 함수를 사용하여 할당할 수 있다.
그러하여 포인터를 사용해 접근할 수 있고, 낮은 주소에서 -> 높은 주소로 이동한다.
후입선출(LIFO | Last In First Out)
위 그림과 같이 나타낼 수 있는 후입 선출은 스택에 데이터를 저장(push)하고 데이터를 인출(pop)한다.
스택 영역에서 사용하는 후입선출은 맨 위에 있는 데이터만 추가하거나 제거할 수 있다.
즉, 나중에 넣은 객체가 먼저 빠져나가는 자료구조이다.
일상생활에서 예를 들어보자면 승강기를 예로 들 수 있다.
'Nefus > C언어' 카테고리의 다른 글
Nefus - C언어 [프로젝트] (1) | 2024.05.08 |
---|---|
Nefus - C언어 [BOJ 11729, 24060] (0) | 2024.04.11 |
Nefus - C언어 [Codeup 1274, 1282] (0) | 2024.04.06 |