programming heap stack 힙 스택

  • 참고 https://hijuworld.tistory.com/43

  • 구조체(struct)는 상속할 수 없다
  • 클래스(class) 객체는 힙(heap)에 할당된다.
  • 구조체(struct) 객체는 스택(stack)에 할당된다

  • 스택의 경우 사용할 수 있는 메모리 크기가 작고 한정적이다.
  • 힙은 많은 메모리 크기를 가질 수 있다.
  • 스택은 카비지 컬랙션에 의해 관리되지 않기 때문에 성능상 많은 장점이 있다.
  • 가비지 컬랙션의 대상이 아니라는 것은 함수가 종료되면 그때 그때 해제가 된다는 것

구조체 선언을 해도 힙에 할당되는 경우 (잘못된 정보)

  • 모든 필드의 합이 16byte를 넘는 경우 (int변수 4개 이상이면 heap? 이부분은 사실확인이 필요함)
  • 구조체안에 클래스 타입을 필드로 가질 경우

옳은 정보

  • 구조체는 크기와 상관 없이 항상 스택에 할당된다.
  • 구조체에 클래스가 정의 되면 클래스는 힙에 할당되고 클래스이 참조인 주소만 구조체에 기록되어 스택에 할당되는것은 동일하다.
  • 클래스 안에서 구조체를 사용하면 그 구조체는 클래스와 함께 힙에 할당된다.

  • 참고 https://learn.microsoft.com/ko-kr/dotnet/standard/design-guidelines/choosing-between-class-and-struct

  • 참조 형식과 값 형식 간의 첫 번째 차이점은 참조 형식이 힙에 할당되고 가비지 수집된다는 점입니다. 반면, 값 형식은 스택 또는 인라인에서 할당되고 스택이 해제되거나 포함된 형식이 할당 취소될 때 할당이 취소됩니다. 따라서 값 형식의 할당 및 할당 취소는 일반적으로 참조 형식의 할당 및 할당 취소보다 저렴합니다.


  • 스택은 집어넣고 꺼내고를 반복하는 것이라 수행시간 자체는 빠르다
  • 힙은 주소를 기록하고 주소에따라 가는 것이라 수행시간 자체는 느리다
  • 다만 스택이 커지면 전부 꺼내고 집어넣고를 반복하게 되어 수행시간이 느려진다
  • 힙은 커지더라도 주소를 가지고 찾아가기 때문에 규모에 때른 수행시간 지연이 적은 편이다.