주녘공부일지

[C#] 스택 메모리 & 힙 메모리 본문

Programming/Definition, Etc

[C#] 스택 메모리 & 힙 메모리

주녘 2023. 10. 4. 19:13

1. 스택(Stack) 메모리

지역 변수들과 매개변수들을 담는 메모리 공간

- 메서드를 기준으로 스택프레임으로 묶여 스택에 저장됨

- 스택 자료구조처럼 쌓이는 구조로 후입선출(LIFO) 방식

 

ex) 실행의 흐름이 메서드에 진입할 때마다 새로운 int가 스택에 할당되며, 메서드에서 벗어날 때마다 해제

static int Factorial (int x)
{
    if (x == 0)
        return 1;
        
    return x * Factorial (x-1);
}

2. 힙(Heap) 메모리

할당된 객체(참조 형식의 인스턴스)들이 저장되는 메모리 공간

- 런타임에서 new 키워드 등으로 인해 할당된 메모리가 할당되는 공간

 

ex) 새 객체가 생성되면 힙에 객체가 할당되고 더 이상 참조되지 않는 객체들은 가비지 컬렉터가 해제

using System;
using System.Text;

class Test
{
    static void Main()
    {
        StringBuilder ref1 = new StringBuilder ("object1");
        Console.WirteLine (ref1);
        // ref1이 참조하는 StringBuilder 객체는 해제 대상
        
        StringBuilder ref2 = new StringBuilder ("object2");
        StringBuilder ref3 = ref2;
        // ref2가 참조하는 StringBuilder 객체는 해제 대상이 아님
        
        Console.WirteLine (ref3); // object2
    }
}

 

+ C#에서는 객체를 명시적으로 delete 할 수 없음 // 힙 메모리 관리는 가비지 컬렉터가 담당

 

 

참고도서) C# 6.0 완벽가이드