- 함수가 수행 중인 경우에만 함수 내 데이터에 접근할 수 있는 임시 메모리 할당 체계이다.
- 함수 실행을 끝 마치자마자 메모리를 자동으로 할당/해제 한다.
- stack에 비해 상당히 빠르다. (상대적)
- heap 메모리 영역에 비해 저장 공간이 작다.
- 프로그래머가 신경쓸 필요 없다. (알아서 할당/해제 되므로)
- 자동으로 할당 해제되지 않는다.
- 처리 시간(엑세스 시간)은 stack에 비해 상당히 느리다. (상대적)
- 객체를 선언하면 항상 heap 메모리 영역에 생성된다.
- 객체에 대한 참조 정보는 stack 메모리 영역에 저장된다.
- heap 메모리 영역에 저장된 데이터는 수행중인 모든 스레드에서 볼 수 있기 때문에 stack 메모리 할당만큼 안전하지 않음.
- stack 메모리 영역에 비해 상당히 크다.
- 프로그래머가 잘 관리하지 못하면 메모리 누수가 발생할 수 있다.
Stack | Heap | |
---|---|---|
위치 | 연속적 메모리 공간 | 불연속한 메모리 공간에 위치 |
컴파일 타임에 정해진 대로 수향 | 프로그래머가 직접 작성 | |
비용 | 작다 | 크다 |
구현 | 쉽다 | 어렵다 |
처리속도 | 빠르다 | 늘디 |
이슈 | 메모리 shortage | 메모리 fragmentation |
크기 | 정해짐 | 유연함 |
선형적 | 계층적 |