프로세스의 메모리 구조는 프로세스 하나당 하나씩 존재한다.
영역 | 설명 |
---|---|
CODE 영역 | - 사용자가 작성한 프로그램 함수들이 저장되는 공간(소스코드가 저장되는 공간) - CPU에서 동작할 기계어 형태로 변환되어 저장된다 - 컴파일(Compile) 할때 결정되고, 중간에 코드를 바꿀 수 없다(Read-Only) |
DATA 영역 | - 전역변수 또는 static 변수 등 프로그램이 사용하는 데이터를 저장하는 공간 - 전역변수, static 변수를 참조한 코드는 컴파일 완료 후, data 영역의 주소값을 가르키도록 바뀐다. - 전역변수가 변경될 수 있다(Read-Write) |
STACK 영역 | - 호출된 함수의 수행을 마치고 복귀할 주소 및 데이터를 임시로 저장하는 공간 - 데이터에는 지역변수, 매개변수, 리턴값, 파라미터 등이 있다 - 이 영역은 함수를 호출할때만 기록하고 함수의 수행이 완료되면 사라진다. - 컴파일 할 때 stack 영역의 크기가 결정되기 때문에 무한정 할당할 수 없다. - 재귀함수가 반복해서 호출되거나 메모리를 초과할 만큼의 지역변수가 있다면 stack overflow가 발생한다. |
HEAP 영역 | - 프로그래머가 필요할 때마다 사용하는 메모리 영역 - heap 영역은 런타임할 때 결정된다. |