김김김의 게임개발
  • 유니티 게임개발 - 메모리 구조
    2023년 10월 05일 21시 47분 36초에 업로드 된 글입니다.
    작성자: noun06

    CPU: 컴퓨터의 뇌, 프로세서, RAM에 저장된 데이터 메모리 연산처리

    RAM: 컴퓨터의 최근 기억, 메모리, CPU가 연산처리할 데이터가 저장되는 곳

    코드 영역: 프로그램의 실행 코드를 저장하는 곳. C# 스크립트 같은 실행코드가 포함됨.

    데이터 영역: 초기화된 전역 및 정적 변수, 상수가 저장됨. 

    힙 영역: 동적으로 할당된 메모리를 관리하는데 사용. 클래스는 참조 형식으로 되어있음. 참조 형식의 변수는 스택 영역에 데이터의 주소, 힙 영역에 데이터의 값을 저장하여 동시에 사용함. C#에서는 new 연산자로 객체를 동적 생성.

    using System;
    
    class Program
    {
        class MyClass
        {
            public int Value;
        }
    
        static void Main()
        {
            MyClass obj1 = new MyClass(); // 힙 영역에 객체를 동적으로 할당.
            obj1.Value = 10;
    
            MyClass obj2 = new MyClass();
            obj2.Value = 20;
    
            Console.WriteLine("객체 1의 값: " + obj1.Value);
            Console.WriteLine("객체 2의 값: " + obj2.Value);
    
            // 힙에 할당된 객체는 수동으로 해제해야 함.
            obj1 = null;
            obj2 = null;
        }
    }

     

    스택 영역: 값 타입의 변수들(int, char, bool등)이 저장됨. 함수 안에 선언된 지역 변수, 매개변수는 함수의 경우 호출이 끝날 때 자동을 해제됨( 스택에 할당된 메모리들).

    using System;
    
    class Program
    {
        static void Main()
        {
            int num1 = 10; // 스택 영역에 정수 변수를 선언하고 초기화.
            int num2 = 20;
    
            int result = AddNumbers(num1, num2); // 함수 호출
    
            Console.WriteLine("결과: " + result);
        }
    
        static int AddNumbers(int a, int b)
        {
            int sum = a + b; // 스택에 지역 변수 sum을 만듦.
            return sum;     // 결과를 반환하고 함수가 종료될 때 sum 변수도 스택에서 제거됨.
        }
    }

     

    스택 오버플로우: 스택의 크기는 제한적임. 스택 메모리 공간을 넘어서는 상황이 스택 오버플로우. 무한 재귀호출, 너무 많은 함수 호출, 지역 변수의 과도한 사용을 할 때 발생할 수 있음.

    댓글