프로그램이 실행되기 위해서는 운영체제가 프로그램 정보를 메모리에 로드(적재)해야 한다.
메모리 구조에는 크게 4가지 영역으로 데이터,코드,힙,스택 영역이 있는데, 스택과 힙에 대해서 알아보자.
스택이란 함수 호출에 필요한 지역변수, 매개변수,함수 호출 후 되돌아갈 주소값들이 저장되는 영역이다. 함수호출이 완료되면 저장된 변수들이 사라진다.(LIFO구조로 삭제한다.(자동 관리됨))
스택영역의 경우 top에 메모리주소가 낮은 순으로 쌓이게 되는데(높은주소부터 쌓인다는 뜻), 이는 연속된 메모리가 할당된다고 생각하면 된다.(즉, 메모리의 단편화가 없다)
힙이란 동적으로 메모리를 할당할 때, 사용하는 영역이다.(프로그래머가 직접 할당하는 방식)
힙의 메모리의 경우 GC(가비지 컬렉터)가 삭제하게 된다.
힙의 경우 메모리주소가 낮은 것부터 쌓이기 시작해 높은 주소가 쌓이게 된다.
메모리의 공간이 부족해 데이터가 넘친다는 의미
스택의 경우 메모리 주소가 높은 것부터 할당이 되는 반면, 힙의 경우 메모리 주소가 낮은 것부터 할당되기 때문에 서로의 영역을 침범할 가능성이 있게된다.종류
- 스택 오버플로우 : 스택이 힙 영역을 침범하는 경우
- 힙 오버플로우 : 힙이 스택 영역을 침범하는 경우
스택의 경우 메모리에 접근할 수 있는 부분은 top부분 밖에 없다. 이는 함수가 실행 중일 경우에만 접근이 가능하다는 의미이다.
결론적으로 메모리 할당을 효율적으로 하기 위해 구분한다고 말할 수 있다.