기초 메모지

메모리 구조(Memory Structure) 본문

토막글

메모리 구조(Memory Structure)

라큐브 2022. 7. 11. 02:13

가비지 컬렉터(GC : Garbage Collection)가 포함된 매니지먼트 언어(Management Language : C#, Java)를
사용하다보면 딱히 신경 쓸 필요가 없는게 메모리 구조다.

모든 언어의 목적은 사람이 컴퓨터에게 일을 시키기 위함이다. 매니지먼트나 언매니지먼트 모두 언어다. 

관리자가 일을 잘 시키려면 팀원들을 잘 알아야하듯 컴퓨터에 일을 잘 시키려면 컴퓨터를 잘 알아야한다고 생각한다.

그러니 프로그래머(관리자)가 컴퓨터(직원)에게 일을 잘 시키려면 컴퓨터를 잘 아는 것 부터 시작해야한다고 생각한다.

메모리(Memory)

컴퓨터가 일을 할때 수치, 명령, 자료를 임시적으로 저장하는 곳이다. 
메모리는 크게 4가지 영역으로 나눌 수 있다.

 

- 코드 영역

- 데이터 영역

- 힙 영역

- 스택 영역

 

코드 영역(Code Area)

다양한 언어로 작성한 코드가 여기에 들어간다. 실행할 프로그램의 코드가 로드되는 영역이라 텍스트(Code) 영역이라고도 한다.

상수(Const), 함수(Function) 제어문 등이 지정된다.

 

데이터 영역(Data Area)

전역 변수와 정적(Static) 변수가 할당되는 영역이다.

프로그램이 시작될때 동시에 할당되고, 프로그램이 종료되어야 소멸되는 영역이다.

 

필드(Field), 정적(Static) 변수 등이 지정된다.

class Program
{
    static string FieldText = "";
    int FieldNumber = 1234;
}

스택 영역(Stack Area)

지역 변수와 매개 변수가 할당되는 영역이다.

메서드, 지역 변수, 매개 변수가 할당되고 함수나 메서드가 종료되면 소멸한다.

 

메서드(Method). 지역 변수(Local Variable), 매개 변수(Parameter)가 할당된다.

static void Add(int x, int y)
{
    Console.WriteLine(x + y);
}

static void Minus(int x, int y)
{
    Console.WriteLine(x - y);
}

static void Division(int x, int y)
{
    Console.WriteLine(x / y);
}

static void Multiply(int x, int y)
{
    Console.WriteLine(x * y);
}

static void WriteConsole(int Number)
{
    string PreFix = "Value : ";
    Console.WriteLine(PreFix + Number);
}

메서드가 스택 영역에 할당되므로 

예외 처리 시 "StackTrace" 즉 메서드가 할당된 스택 영역을 추적한다는 것이다.

 

스택(Stack) 구조이기때문에 할당도 LIFO(Last-In First-Out) 구조로 높은 주소에서 낮은 주소로 쌓이는 식으로 할당된다.

 

힙 영역 (Heap Area)

사용자 정의 메모리. 사용자가 직접 할당하고 해제한다.

사용자가 직접 관여 할 수 있기 때문에 메모리 누수 발생한다면 이 영역에서 일어난다고 생각하면 된다.

매니지먼트 언어(C#, Java)에서는 가비지 컬렉터(GC : Garbage Collection)가 동작하는 부분이다.

비매니지먼트 언어(C++, C)에서는 안정성을 포기하는 대신 프로그래머의 역량에 따라 큰 성능 향상이 가능하다.

반응형
Comments