스택(Stack)과 힙(Heap)은 메모리 관리와 관련된 두 가지 중요한 메모리 영역이다. 각각의 차이점은 크게 메모리 할당 방식과 사용 용도에 따라 다르다.
스택은 자동 메모리 할당을 담당하는 메모리 영역이다.
특징
LIFO(Last In, First Out) 방식: 나중에 들어온 데이터가 먼저 빠져나가는 구조이다.
빠른 메모리 할당/해제: 스택에서 메모리는 함수 호출과 리턴에 따라 자동으로 할당되고 해제된다. 함수가 호출되면 해당 함수의 지역 변수들이 스택에 할당되고, 함수가 끝나면 자동으로 메모리가 해제된다.
지역 변수 저장: 함수 내의 지역 변수, 매개변수, 반환 주소 등이 스택에 저장된다.
스택은 고정된 크기를 가지고 있으며, 스택 오버플로우(Stack Overflow)가 발생할 수 있다.
스택은 메모리 할당과 해제가 매우 빠르다.
단점
스택은 크기가 제한적이기 때문에 큰 데이터를 저장하기엔 적합하지 않다.
스택은 동적으로 크기를 변경할 수 없고, 할당된 크기를 초과할 경우 스택 오버플로우가 발생한다.
힙은 동적 메모리 할당을 담당하는 메모리 영역이다.
특징
동적 메모리 할당: 힙은 프로그램 실행 중에 메모리를 동적으로 할당하고 해제할 수 있습니다.
임의 접근: 스택과 달리 힙은 메모리가 연속적이지 않고, 자유롭게 할당됩니다. 이로 인해 메모리 단편화가 발생할 수 있습니다.
수동 관리: 메모리 할당과 해제는 프로그래머의 책임입니다. C#에서는 가비지 컬렉션을 통해 자동으로 메모리를 해제하지만, 여전히 동적 메모리 할당과 해제를 담당하는 메모리 영역입니다.
메모리 크기 제한이 없음: 힙은 크기가 매우 크기 때문에 많은 양의 데이터를 할당할 수 있습니다.
단점
힙은 스택보다 메모리 할당과 해제가 상대적으로 느립니다.
메모리 단편화: 힙은 메모리가 자유롭게 할당되므로, 여러 번의 할당과 해제가 반복되면 단편화(fragmentation)가 발생할 수 있습니다.
수동 관리: 메모리 할당 후 해제를 수동으로 해야 하며, 이를 잘못 관리하면 메모리 누수(memory leak)가 발생할 수 있습니다.
야래야래 스택과 힙 메모리를 정복하셨군여,,,짝짝짝 축하드립니다!!!! 역시 억울핑 믿고 있었다구!