힙(heap) 메모리란?
힙메모리는 다음과 같은 스택 메모리의 단점을 보완합니다.
■ 스택 메모리의 단점
수명
함수가 반환되는 순간 그 안에 있던 데이터가 다 날아갑니다.
전역 변수는 언제나 살아있고, 지역 변수는 함수 안에서만 유효합니다.
-> 프로그래머가 메모리의 수명을 자유롭게 결정하고 싶다.
크기
스택메모리는 특정 용도로 떼놓은 거라 크기가 작습니다. 차지할 크기를 컴파일 시에 결정하니까 크게 못 잡습니다.
그래서 엄청 큰 데이터를 처리해야 할 경우 스택 메모리에 못 넣죠.
예) 4K로 녹화해서 파일 크기가 2GB인 동영상 파일을 처리할 수 없음
-> 용량 제한 없이 메모리 사용하고 싶다
■ 힙(Heap) 메모리의 장점
크기
컴파일러 및 CPU가 자동적으로 메모리 관리를 안 해주기 때문에 (unmanaged)
프로그래머가 원하는 때, 원하는 만큼 메모리 할당받아와 사용하고 원할 때 반납(해제)할 수 있습니다.
용량 제한 없음
프로그래머가 데이터의 수명을 직접 제어할 수 있어, 컴퓨터에 남아있는 메모리만큼 사용가능합니다.
- 호출이 끝난다고 사라지지 않습니다.
■ 힙(Heap) 메모리의 단점
메모리 누수 위험성 있음
매니지드 언어인 Java는 메모리 할당받을 때 new 키워드를 사용합니다.
그렇게 사용 후에는 해제 신경을 안씁니다. 메모리 해제를 알아서 해주기 때문입니다.
하지만 C는 언매니지드라 프로그래머가 직접 해줘야 합니다.
놓치면 그 메모리는 계속 누군가에게 빌려준 상태로 아무도 그 메모리를 쓸 수 없기 때문입니다. -> 메모리 누수 발생
스택에 비해 할당/해제 속도가 느림
함수가 요청한 크기만큼의 빈 공간을 찾으려고 이리저리 찾아야 합니다.
단순하게 처음부터 찾거나 최적화된 방법으로 검색한다해도 스택메모리보다 여전히 느립니다.
스택 메모리 | 힙 메모리 |
정적 메모리 | 동적 메모리 |
오프셋 개념으로 정확히 몇 바이트씩 사용해야 하는지 컴파일 시 결정 | 실행 중에 크기와 할당/해제 시기가 결정됨 |
-----------------------------------
-----------------------------------
'컴퓨터 공학 > C, C++' 카테고리의 다른 글
[ C ] 메모리 이해하기7 _malloc 짝꿍 함수 free 란? (389) | 2020.07.16 |
---|---|
[ C ] 메모리 이해하기6 _동적메모리란? / 동적 할당 개념 그림으로 이해하기 (395) | 2020.07.15 |
[ C ] 메모리 이해하기4 _스택(stack) 메모리란? (392) | 2020.07.15 |
[ C ] 메모리 이해하기3 _register 키워드란? register 변수의 제약 (399) | 2020.07.14 |
[ C ] 메모리 이해하기2_레지스터(Register)란? 필요한 이유 (413) | 2020.07.13 |
댓글