코드(텍스트)
영역1. 코드(텍스트)
가 저장되는 영역CPU
는 코드 영역에 저장된 명령어를 하나씩 가져와 처리데이터
영역1. 전역 변수(global)
저장 공간2. 정적 변수(static)
저장 공간3. 외부 변수(exturn)
저장 공간힙
영역reference(ref) 타입
저장 공간동적 메모리 할당:
동적 할당을 통해 생성되는 변수의 저장 공간 런 타임
크기 결정
동적 할당
: 사용자가 메모리 영역을 직접 관리할 수 있고, 직접 관리 해야만 하는 방식- 힙이 자란다 = 위에서 아래로 쌓인다.(낮은 주소 -> 높은 주소 방향 할당)
장점
- 주소를 통한 변수의 접근 및 연산 가능
- 메모리 크기의 제한이 없음
단점
상대적으로 느린 접근(할당, 해제가 느림)
메모리를 직접 관리 -> 메모리 누수
발생 가능
OS마다 메모리 관리 방법이 다르고, 포인터를 사용해 어렵다.
SOH(Small of Heap)
작은 용량의 객체
를 위한 전용 힙 영역LOH (Large Object Heap)
큰 용량의 객체
를 위한 전용 힙 영역스택
영역value(val) 타입 변수
저장 공간
정적 메모리 할당:
정적 할당을 통해 생성되는 변수의 저장 공간 컴파일 타임
크기 결정
함수 호출
과 관계되는 1. 함수, 2. 지역 변수(local), 3. 매개변수, 4. 리턴 값
이 저장되는 공간
함수 호출
시 할당
되고, 호출 종료
시, 소멸
LIFO(Last In First Out = Stack)방식
사용
Push(데이터 저장) & Pop(데이터 인출)
스택이 자란다 = 아래에서 위로 쌓인다.(높은 주소 -> 낮은 주소 방향 할당)
장점
- 매우 빠른 접근(할당, 해제가 빠름)
- 메모리 자동 관리
단점
- 흔히, 레퍼런스 타입은 heap 영역에 저장된다 하지만,
포인터 변수 자체
는stack 영역
에 저장되고,객체 자체
는heap 영역
에 저장//이하 코드는 코드 영역에 저장 public class Orc{ } public class Test{ int //stack 영역 | heap 영역 저장 Orc orc1 = new Orc(); Orc orc2 = new Orc(); Orc orc3 = new Orc(); }
가비지 컬렉션:
일부 언어(C#, JAVA 등)은Heap 메모리 영역
에서할당 해제되어 누수되는 메모리(가비지)
에 대해 일정 주기마다 자동으로 수거하는가비지 컬렉터
를 지원하고, 이를 통해가비지 컬렉션
을 수행한다.