티스토리 뷰

반응형

스택(Stack) 영역과 힙(Heap) 영역은 프로그램에서 사용하는 데이터를 관리하기 위한 메모리 영역에 속하며 각 영역의 주요 차이점은 프로그램에서 메모리를 할당하는 방식과 사용하는 방식에 존재한다.

스택(Stack) 영역

스택 영역은 컴파일할 때 크기가 정해지며 함수를 호출할 때 메모리가 쌓이고 함수에 정의된 데이터를 담아두는 영역으로 후입선출(LIFO, Last In First Out)의 특성을 가진다. 함수를 호출할 때 스택 프레임이 생기고 그 안에 호출된 함수의 매개변수, 지역변수, 리턴 값 등을 담아 두며 함수가 종료되면 메모리도 해제된다.

스택 영역의 크기는 제한이 있기 때문에 함수를 너무 많이 반복하여 사용하게 되면 오버플로우가 발생하여 예기치 않은 동작이 발생할 수 있고 이를 최소화할 방안으로 일부 프로그래밍 언어에는 스택 크기를 변경할 수 있는 옵션이 있다.

다만 스택 영역의 크기를 너무 크게 설정하면 불필요하게 많은 양의 메모리를 낭비하게 되어 시스템의 전체 성능에 영향을 미칠 수 있고 반대로 크기가 너무 작게 설정되면 스택 오버플로우가 자주 발생할 수 있다.

힙(Heap) 영역

힙 영역은 런 타임에 크기가 정해지며 동적 메모리 할당에 사용되는 메모리 영역으로 프로그래머가 직접 할당하는 영역이다.

힙 영역은 운영 체제의 메모리 관리자가 관리하며 프로그램에서 필요에 따라 크기를 늘리거나 줄일 수 있다. 다만 스택 영역과 같이 너무 크게 설정하거나 작게 설정하면 문제가 발생할 수 있다.

 

힙 영역은 스택 영역과 다르게 메모리 호출이 끝나도 바로 해제되지 않고 유지된다. 이 때문에 C와 같은 언어는 적당한 때에 개발자가 직접 해제하여 메모리 누수와 같은 문제를 방지해야 하고 C#이나 Java와 같은 언어는 가비지 컬렉터(GC)를 통해서 자동으로 관리한다.

반응형
댓글
반응형
최근에 올라온 글
Total
Today
Yesterday
글 보관함
«   2024/04   »
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