호빵의 IT 개발소

[C#] 스택과 힙 본문

C#, 유니티/C# 기초

[C#] 스택과 힙

호빵Stack 2022. 1. 2. 23:33

stack - 스택은 후입선출 방식의 자료구조라고 불리며, 영어로는 LIFO(Last-In, First-Out) 구조의 자료구조라고도 불립니다. stack은 함수에 선언되었던 값 형식은 함수를 빠젼가게 되면 자동으로 메모리에서 사라집니다.(정적 메모리 할당)

예)

//색깔 공을 공 주머니에 순서대로 넣는다. 삽입 : Push

빨간 공 -> 파랑 공 -> 초록 공 -> 흰색공

//꺼낼때는 들어간 순서의 역순으로 나온다. 삭제 : Pop

흰색 공 -> 초록 공 -> 파랑공 -> 빨간 공

 

heap - 스택과 반대되는 개념을 가지고 있습니다. heap에서는 new를 사용하여 생성한 값들을 메모리에 저장합니다. 

(동적 메모리 할당)

 

class Knight //참조
{
    public int hp;
    public int attack; 

    public void Move()
    {
        Console.WriteLine("Knight Move");
    }

    public void Attack()
    {
        Console.WriteLine("Knight Attack");
    }
}

struct Mage //복사
{
    public int hp;
    public int attack; 
}

class Program
{
    static void KillMage(Mage mage)
    {
        mage.hp = 0;
    }

    static void KillKnight(Knight knight)
    {
        knight.hp = 0;
    }

    static void Main(string[] args)
    {
        Mage mage;
        mage.hp = 100;
        mage.attack = 50;
        killMage(mage);

        Knight knight = new Knight(); //Knight 객체를 생성(class knight에 접근 가능)
        knight.hp = 100;
        knight.attack = 10;
        killKnight(knight);
    }
}

위 예시 프로그래밍을 보면 mage같은 경우에는 구조체(복사 타입)으로 만들고 knught는 참조타입을 만들었습니다. 

mage - 복사 ->실제 메모리 안에 본체가 들어가있다. (int attack, int hp, 8바이트)

knight - 참조 -> 주소가 들어간다. 컴퓨터 사양에 따라 컴퓨터가 32비트면 32비트가 되고 64비트에서 실행하면 64비트가 됩니다. 주소안에는 실제 본체가 있는 메모리의 주소를 나타낸다. (ㅣ

 

 

 

 

 

---------------------------------------------------------------------------------------------------------------------------

참고 : [인프런] Rookiss님의 [C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문

'C#, 유니티 > C# 기초' 카테고리의 다른 글

[C#] 상속성  (0) 2022.01.03
[C#] static  (0) 2022.01.03
[C#] 복사와 참조  (0) 2022.01.02
[C#] 객체지향 기본  (0) 2022.01.02
[C#] 15. 오버로딩  (0) 2021.12.31
Comments