프로그램이 실행되기 위해서는 먼저 프로그램이 메모리에 로드(load)되어야 함
또한, 프로그램에서 사용되는 변수들을 저장할 메모리도 필요
따라서 컴퓨터의 운영체제는 프로그램의 실행을 위해 다양한 메모리 공간을 제공
1) 코드(code) 영역
- 메모리의 코드(code) 영역은 실행할 프로그램의 코드가 저장되는 영역으로 텍스트(code) 영역
- CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리하게 됨
2) 데이터(data) 영역
- 메모리의 데이터(data) 영역은 프로그램의 전역 변수와 정적(static) 변수가 저장되는 영역입니다.
- 데이터 영역은 프로그램의 시작과 함께 할당되며, 프로그램이 종료되면 소멸합니다.
3) 스택(stack) 영역
- 메모리의 스택(stack) 영역은 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역
- 스택 영역은 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸
- 이렇게 스택 영역에 저장되는 함수의 호출 정보를 스택 프레임(stack frame)
- 푸시(push) 동작으로 데이터를 저장하고, 팝(pop) 동작으로 데이터를 인출
- 이러한 스택은 후입선출(LIFO, Last-In First-Out) 방식에 따라 동작하므로, 가장 늦게 저장된 데이터가 가장 먼저 인출
- 스택 영역은 메모리의 높은 주소에서 낮은 주소의 방향으로 할당
4) 힙(heap) 영역
- 메모리의 힙(heap) 영역은 사용자가 직접 관리할 수 있는 영역
- 힙 영역은 사용자에 의해 메모리 공간이 동적으로 할당되고 해제
- 힙 영역은 메모리의 낮은 주소에서 높은 주소의 방향으로 할당
5) 스택과 힙의 장단점
(1) 스택
- 매우 빠른 액세스
- 변수를 명시 적으로 할당 해제 할 필요가 없음
- 공간은 CPU에 의해 효율적으로 관리되고 메모리는 단편화되지 않음
- 지역 변수 만
- 스택 크기 제한 (OS에 따라 다름)
- 변수의 크기를 조정할 수 없음
(2) 힙
- 변수는 전역 적으로 액세스 할 수 있음
- 메모리 크기 제한 없음
- (상대적으로) 느린 액세스
- 효율적인 공간 사용을 보장하지 못하면 메모리 블록이 할당 된 후 시간이 지남에 따라 메모리가 조각화되어 해제 될 수 있음
- 메모리를 관리해야 함 (변수를 할당하고 해제하는 책임이 있습니다)
- 변수는 C언어 realloc() or 자바 new
Top comments (0)