반응형
메모리의 구조
프로그램 실행 순서
- 프로그램 실행 요청이 들어옵니다. ( 사용자 -> OS )
- 프로그램의 정보를 읽어 메모리에 로드합니다. (OS -> 보조기억장치(HDD))
- 프로그램 코드(Program Code)를 가져다 메모리를 관리하고 명령문을 실행합니다. (CPU -> 주기억장치(RAM))
- 동적 메모리가 할당되면 Free Store 영역을 사용합니다. (Heap 사용)
- 스택 메모리가 할당되면 Free Store 영역을 사용합니다. (Stack 사용)
출처 : https://jinshine.github.io/2018/05/17/%EC%BB%B4%ED%93%A8%ED%84%B0%20%EA%B8%B0%EC%B4%88/%EB%A9%94%EB%AA%A8%EB%A6%AC%EA%B5%AC%EC%A1%B0/
프로그램이 실행 될 때, OS는 메모리(RAM)에 4가지 공간을 할당 해줍니다.
Code, Data, Heap, Stack
출처 : http://www.tcpschool.com/c/c_memory_structure
Code
- 실행할 프로그램의 코드가 저장되는 영역.
- CPU가 Code 영역의 명령어들을 하나씩 가져가서 처리합니다.
Data
- 전역변수와 static변수가 할당되는 영역.
- 프로그램의 시작과 동시에 할당되고, 프로그램의 종료 시에 메모리가 소멸됩니다.
Heap
- 프로그래머가 할당, 해제하는 메모리 공간. (Java에서는 가비지 컬렉터가 자동으로 해제)
- 이 공간에 메모리 할당하는 것을 동적 할당(Dynamic Memory Allocation)이라고 부릅니다.
- 런타임 시에 크기가 결정.
- 메모리의 낮은 주소 -> 높은 주소
- ex) 클래스, 클로저
출처 : https://i.imgur.com/GImVa8L.png
- Heap이 넘어가면 Heap Overflow
- Stack이 넘어가면 Stack Overflow
Stack
- 프로그램이 자동으로 사용하는 임시 메모리 영역.
- 함수 호출 시 생성되는 지역 변수와 매개 변수가 저장되는 영역.
- 함수 호출 완료 시 소멸됩니다.
- 메모리의 높은 주소 -> 낮은 주소
더 자세한 사항은 TCPschool - 스택 프레임에서 확인 가능합니다.
'CS 지식 > 운영체제' 카테고리의 다른 글
Deadlock(데드락) (0) | 2023.02.20 |
---|---|
동기 vs 비동기, 블로킹 vs 논블로킹 (0) | 2023.02.20 |
프로세스(Process) vs 스레드(Thread) (3) | 2023.02.16 |
컨텍스트 스위칭(Context Switching) (0) | 2023.02.13 |
댓글