본문 바로가기
컴퓨터 공학/C, C++

[ C ] 메모리 이해하기5_힙(heap) 메모리란?

by hahehohoo 2020. 7. 15.
반응형

힙(heap) 메모리란?

 

 

힙메모리는 다음과 같은 스택 메모리의 단점을 보완합니다. 

 

스택 메모리의  단점

수명

 

함수가 반환되는 순간 그 안에 있던 데이터가 다 날아갑니다.

전역 변수는 언제나 살아있고, 지역 변수는 함수 안에서만 유효합니다.

 

-> 프로그래머가 메모리의 수명을 자유롭게 결정하고 싶다. 

크기

스택메모리는 특정 용도로 떼놓은 거라 크기가 작습니다. 차지할 크기를 컴파일 시에 결정하니까 크게 못 잡습니다.

그래서 엄청 큰 데이터를 처리해야 할 경우 스택 메모리에 못 넣죠.

예) 4K로 녹화해서 파일 크기가 2GB인 동영상 파일을 처리할 수 없음

 

-> 용량 제한 없이 메모리 사용하고 싶다

 


■ 힙(Heap) 메모리의  장점

크기

컴파일러 및 CPU가 자동적으로 메모리 관리를 안 해주기 때문에 (unmanaged)

프로그래머가 원하는 때, 원하는 만큼 메모리 할당받아와 사용하고 원할 때 반납(해제)할 수 있습니다. 

 

용량 제한 없음

프로그래머가 데이터의 수명을 직접 제어할 수 있어, 컴퓨터에 남아있는 메모리만큼 사용가능합니다.

- 호출이 끝난다고 사라지지 않습니다. 

 

■ 힙(Heap) 메모리의  단점

 

 

힙 메모리 / 출처: 하헤호후

 

메모리 누수 위험성 있음

매니지드 언어인 Java는 메모리 할당받을 때 new 키워드를 사용합니다.

그렇게 사용 후에는 해제 신경을 안씁니다. 메모리 해제를 알아서 해주기 때문입니다. 

 

하지만 C는 언매니지드라 프로그래머가 직접 해줘야 합니다.

놓치면 그 메모리는 계속 누군가에게 빌려준 상태로 아무도 그 메모리를 쓸 수 없기 때문입니다. -> 메모리 누수 발생

 

 

스택에 비해 할당/해제 속도가 느림

함수가 요청한 크기만큼의 빈 공간을 찾으려고 이리저리 찾아야 합니다. 

단순하게 처음부터 찾거나 최적화된 방법으로 검색한다해도 스택메모리보다 여전히 느립니다. 

 

 

 

스택 메모리 힙 메모리
정적 메모리 동적 메모리
오프셋 개념으로 정확히 몇 바이트씩 사용해야 하는지 컴파일 시 결정 실행 중에 크기와 할당/해제 시기가 결정됨

 

 

 

-----------------------------------

C언어 문법 총정리

목록 보러가기 

-----------------------------------

 

 

반응형


댓글