카테고리 없음

Nefus C언어 4차시 과제 - 10203 김건우

bamtoriya 2024. 4. 17. 00:48

메모리 구조

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

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

따라서 각 컴퓨터의 운영체제는 프로그램의 실행을 위해 다양한 메모리 공간을 제공하며,

이를 메모리의 구조라고 부릅니다.

 

메모리 구조는 크게 코드(code), 데이터(data), 스택(stack), 힙(heap) 영역으로 나뉩니다.

 

 

코드(code) 영역

코드 영역은 프로그램의 소스코드가 기계어로 저장되는 영역이며, 텍스트 영역이라고 부르기도 합니다.

실행 파일을 구성하는 명령어들이 올라가는 메모리 영역으로, 함수, 제어문, 상수 등이

이 메모리 영역에 지정됩니다.

CPU에서 이 코드 영역에서 저장된 명령어를 하나씩 사용합니다.

 

데이터(data) 영역

데이터 영역은 전역 변수와 정적 변수가 할당되는 메모리 영역입니다.

메인 main() 함수 전에 선언되어서 프로그램의 시작과 동시에 메모리가 할당되며,

프로그램이 종료되면 메모리가 소멸한다.

 

스택(stack) 영역

스택 영역은 사용자가 직접 관리를 해주어야하는 메모리 영역입니다.

이 공간에 메모리 할당하는 행위를 "동적 할당"이라고 부르며,

메모리의 낮은 주소에서 높은 주소로 이동합니다.

 

또한, 응용 프로그램이 종료되어도 메모리가 유지되어 사용 후 반드시 메모리 해제를 해주어야합니다.

참조형 데이터 타입을 가지고 있는 객체, 배열등이 이곳에 저장되지만

힙 영역에 있는 오브젝트들을 가리키는 변수들은 스택에 저장됩니다.

 

힙(heap) 영역

프로그램이 자동으로 사용하는 임시 메모리 영역입니다.

함수를 호출하면 생성되는 지역 변수와 매개 변수가 저장되는 영역으로

함수 호출시에 할당되며 호출 완료시에는 소멸합니다.

메모리의 높은 주소부터 할당되는 후입선출(LIFO) 구조로,

높은 주소에서 낮은 주소로 이동합니다.

 

자유 영역

메모리 구조에서 큰 비중을 차지하지는 않지만, 빈 상태로 존재하는 영역입니다.

프로그램이 동작할때의 상황에 따라서 스택과 힙으로 덮혀지며,자유 영역이 스택과 힙으로 덮히는 과정에서 스택과 힙이 서로의 영역으로 침범하게 되면오버플로우 현상이 일어나게 된다.

 

후입선출(Last In First Out, LIFO)

스택(stack)는 리스트의 한쪽 끝에서 자료의 삽입과 삭제가 이루어지는 자료구조입니다.

이 스택은 일상생활에서도 꽤 비슷한 사례들을 많이 찾아볼 수 있습니다.

이삿짐으로 예를 들어보면, 이사를 하기 위해 이삿짐 차에 이삿짐을 차곡차곡 넣는 과정이

바로 이 스택의 과정이라고 얘기할 수 있습니다.

 

그리고, 후입선출로 스택에 삽입한 데이터는 삽입된 순서의 역순으로 출력됩니다.

마치 이사를 할 건물에 도착을 해서 이삿짐을 뺄때, 가장 마지막에 넣은 이삿짐이 가장 먼저 나오고,

가장 처음에 넣은 이삿짐이 가장 마지막에 나오는 것처럼 후입선출의 데이터도 똑같습니다.

 

 

따라서 이 모든 과정을 Last In First Out, LIFO라고 부릅니다.

 

이 후입선출이 이루어지는 과정은 크게 4가지로 나눌 수 있는데,

첫번째, 데이터 삽입(push),

두번째, 데이터 추출 및 삭제(pop),

세번째는 데이터 검색(find),

마지막 과정은 데이터 보기(show)입니다.

이러한 LIFO의 장점은 구조가 단순해서 구현이 쉽다는점과 데이터의 저장/읽기 속도가 빠르다는 것이고,

단점으로는 데이터 최대 갯수를 미리 정하고 저장공간을 확보해야 해서 저장공간의 낭비가 생길 수 있다는 점입니다.

 

 

따라서 LIFO는 간단한 입력은 순서 중에서 가장 최근 값만 기억하면 가능하지만

복잡한 입력은 최근 값의 전에 입력된 값도 기억해야하는 경우 많이 사용됩니다.