Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 티스토리챌린지
- 혼공챌린지
- 오블완
- join
- 혼공파
- groupby
- 안드로이드스튜디오
- Til
- 기술면접
- 프로그래머스
- 인프런
- 정처기
- 자료구조
- CS
- Android
- select
- 정보처리기사
- MySQL
- 코틀린
- SQL
- doitandroid
- 알고리즘
- 코테
- 스터디
- 혼공단
- java
- 카카오코테
- 안드로이드
- 자바
- Kotlin
Archives
- Today
- Total
Welcome! Everything is fine.
[CS 발표_01] 메모리의 힙 영역과 스택 영역 본문
728x90
첫 번째 CS 스터디 발표! 이번주는 운영체제에 대해 공부해보았다. 잘 이해가 되지 않거나 생소한 주제들을 공부해보고, 자신이 공부한 내용들을 발표식으로 설명해보기로 하였다. 내용은 책과 여러 블로그, 유튜브 강의 등을 참고하였다.
메모리의 힙 영역과 스택 영역의 차이에 대해 설명하고,
힙 영역을 너무 크게 잡으면 어떤 일이 벌어지는지 설명해보세요.
프로세스 메모리 구조
프로세스는 운영체제로부터 독립된 데이터 영역을 할당받으며, 다른 프로세스의 메모리 영역에 접근할 수 없다. 프로세스의 메모리 영역 구조는 코드, 데이터, 힙, 스택으로 구성된다.
- 코드 영역 : 텍스트 영역이라고도 하며, 실행할 코드가 기계어로 컴파일되어 저장되는 영역. CPU가 해당 코드 영역에 저장된 명령어를 하나씩 가져가서 처리하게 된다.
- 데이터 영역 : 전역 변수, 정적 변수, 배열, 구조체 등이 저장되는 영역. 프로그램이 시작되는 동시에 할당되며, 프로그램이 종료되면 소멸한다.
- 힙 영역 : 사용자에 의해 동적 메모리 할당이 일어나는 영역. 자바를 예로 들면 new 키워드로 생성한 객체가 많아지면 그만큼 힙 영역의 크기도 늘어나게 된다.
- 스택 영역 : 지역 변수, 함수의 매개 변수, 반환되는 주소 값 등이 저장되는 영역. 함수가 호출될 때마다 새로운 스택 프레임(스레드별로 하나의 실행 스택이 생성됨)이 스택에 추가되고, 함수가 반환되면 해당 프레임이 제거된다.
스택(stack) 영역
- 지역 변수, 함수의 매개 변수, 반환되는 주소 값 등이 저장되는 영역.
- LIFO 방식으로 높은 주소 값에서 낮은 주소값으로 메모리가 할당된다.
- 함수가 호출되면 기록되고 함수가 종료되면 소멸된다. → 별다른 관리 필요X
- 컴파일 때 영역의 크기가 결정되므로 스택 크기가 제한되어있다.
- 힙에 비해 빠르다.
- 높은 주소 : 메모리의 상단에 위치한 주소, 일반적으로 높은 주소는 상대적으로 큰 값을 가지며, 주로 시스템의 코드 섹션과 힙 섹션에 할당된다.
- 낮은 주소 : 메모리의 하단에 위치한 주소. 일반적으로 낮은 주소는 상대적으로 작은 값을 가지며, 주로 시스템의 스택 섹션에 할당된다.
- 물리적 메모리 주소의 경우, 낮은 주소는 메모리 모듈의 시작 부분(메모리의 위쪽)을 나타내고, 높은 주소는 메모리 모듈의 끝 부분(메모리의 아래쪽)을 나타낸다. 하지만 가상 메모리 주소의 경우, 높은 주소와 낮은 주소의 구분은 운영 체제와 프로그래밍 언어에 따라 다를 수 있다.
힙(heap) 영역
- 사용자에 의해 동적 메모리 할당이 일어나는 영역.
- FIFO 방식으로 낮은 주소 값에서 높은 주소값으로 메모리가 할당된다.
- 런타임 때 영역의 크기가 결정된다.
- 스택에 비해 느리고 직접 힙 영역을 관리해야한다.
- 컴파일은 코드를 번역하고 준비하는 과정으로 소스 코드를 실행하기 전 미리 컴파일 한다. 런타임은 프로그램이 실제로 실행되고 작업을 수행하느 시간을 말한다.
- 스택 영역과 힙 영역은 메모리 영역을 공유하기 때문에 서로의 영역을 침범하는 문제가 발생할 수 있다. 스택 영역이 힙 영역을 침범하는 경우를 스택 오버플로, 힙 영역이 스택 영역을 침범하는 경우를 힙 오버플로라고 한다.
힙 영역을 너무 크게 잡는다면?
위에서 말했듯이 힙 영역은 new 키워드로 객체를 생성하면 그 크기도 늘어나고, 제거하면 크기가 줄어든다. 만약 힙 영역을 너무 크게 잡으면 메모리가 낭비되면서 시스템의 전체적인 성능에 영향을 줄 수 있다. 또한 힙이 너무 크면 Garbage Collection의 오버헤드가 증가할 수 있다는 문제가 있다. Garbage Collect는 사용되지 않는 메모리를 정리하는 프로세스인데, 힙이 크면 이 Garbage Collection의 수행 시간이 너무 길어지게 된다. 따라서 Java의 JVM에서도 처음부터 힙 영역 크게 잡지않고, 힙 영역이 꽉 차면 그때 GC 진행 후 힙 영역을 확장한다.
'CS 스터디 > 발표' 카테고리의 다른 글
[CS 발표_06] 인덱스란? (0) | 2024.05.31 |
---|---|
[CS 발표_05] 데이터베이스에서 락이란? (0) | 2024.05.31 |
[CS 발표_04] UDP의 특징과 UDP에서의 오류 검출 방법 (0) | 2024.05.27 |
[CS 발표_03] HTTP Keep Alive vs TCP Keep Alive (0) | 2024.05.27 |
[CS 발표_02] OS의 메모리 관리 전략(페이징 & 세그멘테이션) (0) | 2024.05.09 |