[CS]메모리 구조

강동현·2023년 12월 28일
0

CS

목록 보기
2/19

메모리 구조

pic1

1. 코드(텍스트) 영역

  • 1. 코드(텍스트)가 저장되는 영역
  • CPU코드 영역에 저장된 명령어를 하나씩 가져와 처리

2. 데이터 영역

  • 1. 전역 변수(global) 저장 공간
  • 2. 정적 변수(static) 저장 공간
  • 3. 외부 변수(exturn) 저장 공간

3. 영역

  • reference(ref) 타입 저장 공간
  • 동적 메모리 할당: 동적 할당을 통해 생성되는 변수의 저장 공간 becausebecause 런 타임 크기 결정
  • 동적 할당: 사용자가 메모리 영역을 직접 관리할 수 있고, 직접 관리 해야만 하는 방식
  • 힙이 자란다 = 위에서 아래로 쌓인다.(낮은 주소 -> 높은 주소 방향 할당)

장점

  • 주소를 통한 변수의 접근 및 연산 가능
  • 메모리 크기의 제한이 없음

단점

  • 상대적으로 느린 접근(할당, 해제가 느림)

  • 메모리를 직접 관리 -> 메모리 누수 발생 가능

  • OS마다 메모리 관리 방법이 다르고, 포인터를 사용해 어렵다.

  • SOH(Small of Heap)

    • 작은 용량의 객체를 위한 전용 힙 영역
    • Mark & Sweep 알고리즘의 .Net 세대별 관리 GC로 일반적으로 관리 되는 방식
    • 특징
      • 크기 제한: SOH에는 일반적으로 85KB 이하 객체만 저장
      • 할당 속도: SOH는 작은 객체를 빠르게 할당하고 해제하도록 최적화
  • LOH (Large Object Heap)

    • 큰 용량의 객체를 위한 전용 힙 영역
    • 큰 객체를 저장하도록 특별히 최적화
    • LOH에 할당된 객체는 3세대라 불리는 곳에 배치
      • 3세대는 물리적 세대로, 논리적으로는 2세대와 같이 수집됨
    • 특징
      • 크기 제한: 크기 제한이 없거나 매우 높은 크기 제한한
      • 할당 속도: 큰 객체를 빠르게 할당하고 해제하도록 최적화

4. 스택 영역

  • value(val) 타입 변수 저장 공간
    정적 메모리 할당: 정적 할당을 통해 생성되는 변수의 저장 공간 becausebecause 컴파일 타임 크기 결정

  • 함수 호출과 관계되는 1. 함수, 2. 지역 변수(local), 3. 매개변수, 4. 리턴 값이 저장되는 공간

  • 함수 호출할당되고, 호출 종료 시, 소멸

  • LIFO(Last In First Out = Stack)방식 사용

  • Push(데이터 저장) & Pop(데이터 인출)

  • 스택이 자란다 = 아래에서 위로 쌓인다.(높은 주소 -> 낮은 주소 방향 할당)

장점

  • 매우 빠른 접근(할당, 해제가 빠름)
  • 메모리 자동 관리

단점

  • 메모리 크기 제한
  • 지역변수만 다룰 수 있음

5. 메모리 저장 특이성

  • 흔히, 레퍼런스 타입은 heap 영역에 저장된다 하지만,
  • 포인터 변수 자체stack 영역에 저장되고, 객체 자체heap 영역에 저장
//이하 코드는 코드 영역에 저장
public class Orc{
}
public class Test{
	int 
	//stack 영역 | heap 영역 저장
	Orc orc1 = new Orc();
	Orc orc2 = new Orc();
	Orc orc3 = new Orc();
}

6. 가비지 컬렉션 & 컬렉터

가비지 컬렉션: 일부 언어(C#, JAVA 등)은 Heap 메모리 영역에서 할당 해제되어 누수되는 메모리(가비지)에 대해 일정 주기마다 자동으로 수거하는 가비지 컬렉터를 지원하고, 이를 통해 가비지 컬렉션을 수행한다.

profile
GAME DESIGN & CLIENT PROGRAMMING

0개의 댓글

관련 채용 정보