메모리 관리

김동현·2022년 9월 13일
0

.NET

  • CLR과 클래스 라이브러리 세트를 의미함
  • CLR은 C# 코드를 컴파일 한 결과물인 IL 코드를 다시 해당 플랫폼에 맞는 코드로 변환하여 하나의 소스코드로 여러 플랫폼을 지원함
  • .NET에는 공용 타입 시스템이 있다
    • 모든 타입은 값 타입과 참조 타입으로 분류
    • 모든 타입은 System.Object 타입을 상속 받음
    • 이를 명확히 인지하고, 박싱과 언박싱을 피하도록 코드를 작성해야 함

가비지 컬렉션

  • 메모리를 수동으로 관리하는 것은 여러 문제점이 있음
    • 메모리 누수 / 이중 해제 / 섣부른 해제
  • 메모리를 자동으로 관리하는 기술
  • 가비지로 가정하는 방법
    • 추적 : 도달 가능성으로 가비지 판단
    • 참조 카운팅 : 참조 횟수로 가비지 판단
  • 표준 .NET은 세대별 가비지 컬렉션을 사용
    • 메모리 할당은 0세대에서만 일어남
    • 메모리 해제 시, 가비지가 아닌 메모리는 윗세대로 승격됨
  • 가비지 컬렉션이 수행되는 동안에는 프로그램이 멈추기 때문에 이에 유의하여 코드를 작성해야 함.

.NET: Unity

  • Unity의 스크립트 백엔드(스크립트 환경)는 Mono, IL2CPP 두 개가 있음 => 여기서 모든 차이가 발생
  • 세대별로 관리하지 않으며, 메모리 압축 또한 없기 때문에 메모리 단편화가 쉽게 일어나고, 힙도 쉽게 확장된다. 그래서 최적화 이슈가 발생할 수 있다.
profile
해보자요

0개의 댓글