알고 있나요?
- 프로세스 주소 공간의 4가지 영역은?
- 이렇게 주소 공간을 나누는 이유는?
프로세스 주소 공간의 4가지 영역
프로세스 주소 공간은 Code, Data, Stack, Heap가 있습니다.
Code
Code 영역은 사용자가 작성한 프로그램 함수들의 코드가 CPU에서 수행할 수 있는 기계어 명령 형태로 변환되어 저장되는 공간입니다. 컴파일 타임에 결정되고 중간에 코드를 바꿀 수 없게 Read-Only로 되어있습니다.
Data
Data 영역은 전역 변수 또는 static변수 등 프로그램이 사용하는 데이터를 저장하는 공간입니다. 전역 변수 또는 static 값을 참조한 코드는 컴파일이 완료되면 data영역의 주소 값을 가리키도록 바뀝니다. 전역 변수가 변경될 수도 있어 Read-Writer로 되어있습니다.
Stack
Stack영역은 호출된 함수의 수행을 마치고 복귀할 주소 및 데이터(지역변수, 매개변수, 리턴 값 등)를 임시로 저장하는 공간입니다.
스택이 가진 LIFO(가장 나중에 들어간 게 먼저 나옴)이라는 특성을 따릅니다. 컴파일 시 Stack 영역의 크기가 결정되기 때문에 무한정 할당할 수 없으며, stack overflowr가 발생할 수 있습니다.
Heap
Heap영역은 프로그래머가 필요할 때마다 사용하는 메모리 영역으로 런타임에 결정됩니다. 자바에서는 객체가 heap에 생성되고 GC에 의해 정리됩니다.
주소 공간을 나누는 이유
이와 같이 구역을 나눈 이유는 데이터를 공유하여 메모리 사용량을 줄이기 위해서 입니다.위해서입니다. Code는 같은 프로그램 자체에서 모두 같은 내용이기 때문에 따로 관리하여 공유하고, Stack과 Deta를 나눈 이유는 스택 구조의 특성과 전역 변수의 활용성을 위해서입니다.
프로그램의 함수와 지역 변수는 스택이 가진 LIFO 특성을 가진 스택에서 실행된다. 따라서 함수들 안에서 공통으로 사용하는 '전역 함수'는 따로 지정해주면 메모리를 아낄 수 있습니다.
정리
프로세스 주소 공간의 4가지 영역은?
Code : 기계어 명령 형태로 저장되는 공간
Data : 프로그램이 사용하는 데이터를 저장하는 공간
Stack : 함수의 수행을 마치고 복귀한 주소 및 데이터를 저장하는 공간
Heap : 프로그래머가 필요할 때마다 사용하는 메모리 영역
이렇게 주소 공간을 나누는 이유는?
데이터를 공유하여 사용량을 줄이기 위해서!
참고했던 포스팅
'📓 Study > Tech Interview' 카테고리의 다른 글
🗺 원시타입과 🧭참조 타입의 차이는 무엇일까요? (0) | 2021.09.17 |
---|---|
🚧 접근 제어자의 종류와 이에 대해 설명해주세요 (0) | 2021.08.20 |
🚩 정적(static)이란 무엇인가요? (0) | 2021.08.06 |
📊 운영체제란? (0) | 2021.08.06 |
CORS란? (0) | 2021.07.29 |
댓글