메모리
프로그램을 실행시킬 때, 변수들을 저장하거나 프로그램을 로드하기 위해 메모리가 필요하다.
이때 운영체제에서는 프로그램에게 4가지의 메모리 공간을 할당하게 된다.
코드 영역 : 프로그램의 코드가 저장되는 영역
데이터 영역 : 프로그램의 전역변수와 정적변수가 (static) 저장되는 영역
스택 영역 : 프로그램의 함수 호출에 사용되는 지역변수, 매개변수가 저장되는 영역
힙 영역 : 사용자가 직접 관리하는 메모리 영역
* Stack 스택은 함수 호출과 관련된 데이터를 저장하는 메모리이다.
이때 저장되는 데이터는 지역변수, 매개변수와 같은 정보를 의미한다.
함수 호출 정보, 지역 변수 저장하는 데 사용된다.
- LIFO (Last In First Out) 구조로 동작되어 마지막에 저장된 데이터가 먼저 제거된다.
함수가 호출되면 데이터가 스택에 push 되고, 함수 실행이 끝나면 pop 된다. - 할당과 해제가 자동으로 이뤄지기 때문에 자동으로 관리할 수 있다는 장점이 있고 처리 속도가 빠르다.
* Heap 힙은 사용자가 프로그램 실행중에 직접 메모리를 할당/해제할 수 있는 동적 메모리이다.
동적으로 생성된 객체, 배열,구조체를 저장하는 데 사용된다.
- 마음대로 메모리를 할당하거나 삭제가 가능하기 때문에 유연하게 사용할 수 있다.
- 메모리의 크기와 생명주기를 직접 관리 할 수 있으며, 프로그램 실행 중 가변적 데이터를 저장할 수 있다.
/ | Stack | Heap |
할당방식 | 자동할당 (후입선출) | 동적할당 |
저장위치 | 지역변수, 매개변수, 함수호출정보 | 동적생성된 객체, 메모리 |
속도 | 빠름 (LIFO구조이기 때문) | stack 보다 느림 |
크기 | 운영체제에 따른 크기 제한 | 제한없음 |
주소방향 | 높은주소 ~> 낮은주소 | 낮은주소 ~> 높은주소 |
장점 | 자동관리, 빠른 속도, 변수의 명시적 할당 X | 크기 유연, 전역접근 |
단점 | 크기 제한, 지역변수만 저장 | 느림, 명시적 관리 필요 |
'코딩공부' 카테고리의 다른 글
다항식 (0) | 2024.11.19 |
---|---|
MUTABLE / IMMUTABLE 의 차이 (0) | 2024.11.19 |