공부/C#

C#의 구조체(struct)는 가비지 컬렉터의 대상인가요?

셩잇님 2023. 3. 5. 22:12
반응형

 

 

구조체가 어떠한 형태로 선언되었는지에 따라 달라집니다. 

C#에서는 구조체를 포함한 모든 객체가 선언 방식에 따라 힙 또는 스택에 할당됩니다. 구조체가 지역 변수나 메서드 매개변수로 선언되면 스택에 할당됩니다. 구조체가 클래스의 필드 또는 배열의 요소로 선언되면 힙에 할당됩니다.

구조체가 힙에 할당되면 다른 객체와 마찬가지로 가비지 컬렉션의 대상이 됩니다. 가비지 콜렉터는 객체가 더 이상 사용되지 않는다고 판단되면 힙에 할당된 구조체를 포함하여 해당 객체가 사용하던 메모리를 회수합니다.

그러나 구조체가 스택에 할당된 경우 가비지 컬렉션의 대상이 되지 않습니다. 구조체를 선언한 메서드가 종료되면 구조체가 사용한 메모리는 자동으로 할당 해제됩니다. 따라서 스택 할당 구조체는 힙 할당 구조체보다 효율적이지만, 메서드 간에 공유하거나 다른 메서드에 매개변수로 전달할 수 없다는 단점도 있습니다.

일반적으로 메서드 간에 공유할 필요가 없는 작은 값 유형으로 작업하는 경우 스택에 할당하는 것이 더 효율적입니다. 더 큰 값 유형으로 작업하거나 메서드 간에 전달해야 하는 경우에는 힙에 할당하고 가비지 수집기와의 상호 작용에 유의해야 할 수 있습니다.

 

 

 

반응형