티스토리 뷰

카테고리 없음

Heap 과 Stack

Sims. 2024. 11. 23. 20:49
728x90

프로그래밍을 하다보면 Heap과 Stack 자료구조를 볼 수 있는데, 이 둘의 차이점을 알아보고자 정리한다.

 

 

1. Stack

스텍은 너무나 자주사용하여 익숙한 자료구조일 것이다. FILO(First In Last Out) 형식을 따르며 주로 재귀함수에서 사용한 다는 점도 너무나 잘 알려진 사실이다. 추가적으로 메모리 부분을 살펴봐야 한다.

Stack의 경우 정적 메모리에 할당되며, 컴파일 시 해당 크기가 결정되어 고정된 사이즈다. 이러다보니, OverFlow , UnderFlow가 발생할 수 있다. ( 정적 메모리 같은 경우는 로컬 변수가 저장되는 곳이다. 추가로, 함수를 호출하면, Stack구조에 쌓이게 되고, 해당 함수가 끝나면 Stack에서 pop되어 메모리가 자동으로 해제된다.)

 

스택의 구조는 상당히 간단한다. 고정된 크기에 넣고,빼고의 작업을 수행하면 되므로 속도가 매우빠르다는 장점이 있지만, 크기가 정해져있어서 크기를 고려하여 사용해야 한다는 단점이 존재한다.

 

 

2. Heap

힙의 경우는  필자같은 경우는 잘 사용하지 않는데, 트리기반의 자료구조로 최대,최소값을 빠르게 찾기위해 설계된 구조라고 한다. 힙은 주로 우선순위 큐, 힙 정렬, 다익스트라 알고리즘에 사용하며 특히 대용량 데이터 처리와 최적화 알고리즘에 유용하게 사용한다고 한다.

 

힙의 경우는 스택과 다르게 '동적' 메모리 영역에 저장이 된다. 즉, 스택과 다르게 그때그때마다 가변적으로 크기를 설정한다는 말이다. C/C++에서 malloc, calloc, realloc 등의 함수를 이용하여 해당 공간을 확보하게 되고, 모두 다 사용했을때는 free함수로 메모리 반환을 명시해줘야 한다.

 

heap의 경우 입력이 불규칙적 할 때 사용하게 되며 반드시 사용하고 메모리를 해제하는 작업이 필수적으로 필요하여 해당 메모리 누수를 상당히 고려해야 한다.

 

결과적으로,

스택은 정적 메모리 / 고정 메모리 사이즈/ 메모리 해제 자동  

힙은 동적 메모리/ 가변 메모리 사이즈 / 메모리 해제 수동 

과 같은 차이점을 지니며, 해당 사항을 인지하고 사용해야 한다.

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
글 보관함