메모리
작업을 처리하기 위한 기억 장치로 물리(메인) 메모리(RAM), 가상 메모리(SSD, HDD의 swap 영역)가 존재한다.
가상 메모리 : 필요한 내용만 물리 메모리에 올려 메모리를 관리하는 기법으로 요구 페이징 기법을 사용한다. (가상 메모리에는 방어적 코드와 같이 불필요할 수 있는 코드가 올라감)
요구 페이징 기법 : 유-무효 비트(valid, invalid)로 페이지가 메모리에 존재하는지 확인 후 없으면 보조 저장 장치에서 가져오는 기법
프로그램 실행 순서
프로그램이 실행하게 되면 OS는 메모리(RAM)에 공간을 할당해줍니다. 이때, 할당해주는 메모리 공간은 4가지(Code, Data, Stack, Heap)가 있습니다.
메모리 구조
1. 코드(Code) 영역
메모리의 코드(code) 영역은 실행할 프로그램의 코드가 저장되는 영역으로 텍스트(code) 영역이라고도 부릅니다. CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리하게 됩니다.
코드영역은 실행 파일을 구성하는 명령어들이 올라가는 메모리 영역으로 함수, 제어문, 상수 등이 여기에 지정된다.
2. 데이터(Data) 영역
메모리의 데이터(data) 영역은 프로그램의 전역 변수와 정적(static) 변수가 저장되는 영역입니다.
데이터 영역은 프로그램의 시작과 함께 할당되며, 프로그램이 종료되면 소멸합니다.
3. 스택(Stack) 영역
메모리의 스택(stack) 영역은 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역입니다. 스택 영역은 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸합니다.
스택 프레임(stack frame) : 스택 영역에 저장되는 함수의 호출 정보
스택 영역은 푸시(push) 동작으로 데이터를 저장하고, 팝(pop) 동작으로 데이터를 인출합니다. 이러한 스택은 후입선출(LIFO, Last-In First-Out) 방식에 따라 동작하므로, 가장 늦게 저장된 데이터가 가장 먼저 인출됩니다.
스택 영역은 메모리의 높은 주소에서 낮은 주소의 방향으로 할당됩니다.
4. 힙(Heap) 영역
메모리의 힙(heap) 영역은 사용자가 직접 관리할 수 있는 '그리고 해야만 하는' 메모리 영역입니다. 힙 영역은 사용자에 의해 메모리 공간이 동적으로 할당(Dynamic Memory Allocation)되고 해제됩니다.
힙 영역은 메모리의 낮은 주소에서 높은 주소의 방향으로 할당됩니다.
예를 들어 클래스, 클로저가 이 부분에 해당 되며 런타임 시에 크기가 결정됩니다.
힙과 스택
HEAP과 STACK영역은 사실 같은 공간을 공유합니다. HEAP이 메모리 위쪽 주소부터 할당되면 STACK은 아래쪽부터 할당되는 식이다. 그래서 각 영역이 상대 공간을 침범하는 일이 발생할 수 있는데 이를 각각 HEAP OVERFLOW, STACK OVERFLOW라고 칭합니다.
→ Stack 영역이 크면 클 수록 Heap 영역이 작아지고, Heap 영역이 크면 클수록 Stack 영역이 작아집니다.
'코딩 공부 > CS' 카테고리의 다른 글
[CS] 프로세스와 스레드 (0) | 2023.02.25 |
---|---|
[CS] 프레임워크와 라이브러리 (0) | 2023.02.13 |
[CS] 객체지향설계 5원칙 : SOLID (0) | 2023.02.01 |
[CS] REST API (REST, RESTful) (0) | 2022.12.07 |
[CS] 아키텍처(Architecture) (0) | 2022.12.04 |