반응형
스택 VS 힙
# 메모리 구조
- 프로그램이 실행되기 위해서는 먼저 프로그램이 메모리에 로드되어야 한다.
- 또한, 프로그램에서 사용되는 변수들을 저장할 메모리도 필요하다.
따라서 컴퓨터의 운영체제는 프로그램의 실행을 위해 다양한 메모리 공간을 제공한다. - 프로그램이 운영체제로부터 할당받는 대표적인 메모리 공간
1. 코드(code) 영역
2. 데이터(data) 영역
3. 스택(stack) 영역
4. 힙(heap) 영역
코드(Code) 영역
- 실행할 프로그램의 코드가 저장되는 영역
- cpu는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리한다.
데이터(data) 영역
- 전역 변수와 정적(static)변수가 저장
- 프로그램의 시작과 함께 할당되며, 프로그램이 종료 되면 소멸
스택(stack) 영역
- 함수 호출과 관계되는 지역 변수와 매개 변수가 저장되는 영역
- 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸
- 스택영역에 저장되는 함수의 호출 정보를 스택 프레임(stack frame)라고 한다.
- 스택 영역은 푸시(push) 동작으로 데이터를 저장하고, 팝(pop) 동작으로 데이터 인출
- LIFO(Last-In-First-Out)방식에 따라 동작
- 메모리의 높은 주소에서 낮은 주소의 방향으로 할당
힙(heap) 영역
- 변수가 차곡차곡 쌓이는 스택과는 달리 힙영역에는 임의의 객체가 생성
따라서 어떤 객체의 프로퍼티에 값을 저장하거나 저장된 값을 가져오고 싶으면, 그 객체의 힙 영역상 좌표를 알고 있어야한다.
- 힙 영역을 두면 하나의 객체를 여러 참조변수에서 공유하는 형태로 사용할 수 있어 훨씬 메모리 공간을 절약할 수 있다.
- 객체(Object)를 선언하면 항상 힙 메모리 영역에 생성되며, 이러한 객체에 대한 참조 정보는 스택 메모리에 저장
- 힙 메모리 영역에 저장된 데이터는 수행중인 모든 스레드에서 볼 수 있기 때문에 스택 메모리 할당만큼 안전하지 않다.
- 힙 메모리를 잘 관리하지 못하면, 프로그램에 메모리 누수(Memory Leak)가 발생할 수 있다.
# 차이점
Stack과 Heap의 차이점
- 스택(stack)은 메모리 할당과 할당 해제가 자동으로 수행된다.
- 힙(heap)은 프로그래머가 수동으로 메모리를 할당하고 해제해야한다.
- 스택 메모리의 처리속도가 힙 메모리 보다 빠르다.
- 메모리 부족 문제는 스택에서 발생할 가능성이 높다.
- 힙 메모리의 주요 문제는 메모리 조각화(Memory Fragmentation) 또는 메모리 단편화
- 스택은 메모리 영역이 더 작고 캐시 친화적
- 힙 메모리는 메모리 전체에 분산되어 더 많은 캐시 누락(Cashe Miss)을 야기한다.
- 스택은 유연하지 않으며 할당된 메모리의 크기를 변경할 수 없다.
참조 :
https://junghyun100.github.io/힙-스택차이점/
https://medium.com/@lunay0ung/stack-vs-heap-a0a0fe5ec5ce
https://blog.naver.com/PostView.nhn?blogId=cjsksk3113&logNo=222274484731
스터디 그룹
반응형
'안드로이드' 카테고리의 다른 글
[Android] 녹음 기능 RecMic to Mp3 (0) | 2022.10.20 |
---|---|
[Android] 네비게이션(Navigation)에 대해 알아보자 (0) | 2022.09.22 |
TextView Ellipsize end가 OS낮은 버전에서 많이 줄여질 때 (0) | 2022.09.20 |
[Kotlin] inline함수 reified키워드 (0) | 2022.08.30 |
[Android] 제네릭(Generic)에 대해 알아 보자 (0) | 2022.08.24 |