본문 바로가기
Computer Science/컴퓨터, CPU, 메모리

메모리 영역(code, data, stack, heap) , overflow , dynamic allocation

by doriver 2022. 5. 30.

https://dorivertt.tistory.com/85

 

프로그램이 실행되는 과정

프로그램이 실행되기 위해서는 먼저 프로그램이 메모리에 load되어야 한다. 또한, 프로그램에서 사용되는 변수들을 저장할 메모리도 필요. https://dorivertt.tistory.com/53 process 언어번역 프로그램 ( 

dorivertt.tistory.com

코드(code) 영역

메모리의 코드(code) 영역은 실행할 프로그램의 코드가 저장되는 영역
CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리
기계어로 제어됨

데이터(data) 영역

메모리의 데이터(data) 영역에는 프로그램의 전역변수(global), 정적변수(static), 배열(array), 구조체(structure) 등이 저장됨
프로그램의 시작과 함께 생성, 프로그램이 종료되면 소멸
함수 내부에 선언된 Static변수는 프로그램이 실행 될 때 공간만 할당되고, 그 함수가 실행 될 때 초기화 됨

스택(stack) 영역

메모리의 스택(stack) 영역은 함수의 호출과 관계되는 지역(local) 변수, 매개변수(parameter), 리턴 값 등이 저장되는 영역

함수의 호출과 함께 생성되며, 함수의 호출이 완료되면 소멸

프로그램이 자동으로 사용하는 임시 메모리 영역

함수의 호출 정보가 저장되는데 이를 스택 프레임(stack frame)이라함  
데이터를 저장(push),인출(pop)한다
가장 늦게 저장된 데이터가 가장 먼저 인출됨

힙(heap) 영역

메모리의 힙(heap) 영역은 사용자가 직접 관리하는 메모리 영역
힙 영역은 사용자에 의해 메모리 공간이 동적으로 할당되고 해제됨(Java에서는 가비지 컬렉터가 자동으로 해제함)
메모리 주소 값에 의해서만 참조되고 사용되는 영역

 

stack,heap overflow

heap과 stack영역은 같은 공간을 공유함

heap이 메모리 위쪽 주소부터 할당되고 stack은 아래쪽부터 할당되는 식

그래서 각 영역이 상대 공간을 침범하는 일이 발생할 수 있는데 이를 각각 heap overflow, stack overflow라함.
stack 영역이 크면 클 수록 heap 영역이 작아지고, heap 영역이 크면 클수록 stack 영역이 작아진다.

메모리의 동적 할당(dynamic allocation)

데이터 영역과 스택 영역에 할당되는 메모리의 크기는 컴파일 타임(compile time)에 결정됨
힙 영역의 크기는 프로그램이 실행되는 도중인 런 타임(run time)에 사용자가 직접 결정
이렇게 런 타임에 메모리를 할당받는 것을 메모리의 동적 할당(dynamic allocation)이라고 함