기본적으로 C#의 구조체는 [StructLayout(LayoutKind.Sequential)]
으로 구현됩니다. 기본적으로 이러한 유형의 개체는 일반적으로 COM Interop에 사용되며 해당 필드는 정의 된 순서대로 유지되어야합니다. 클래스에는 LayoutKind.Auto
이 정의되어 있습니다.Shoud COM Interop에서 수행하지 않으면 내 구조체에 LayoutKind.Auto를 사용합니까?
제 질문은 명시 적으로 구조체를 [StructLayout(LayoutKind.Auto)]
으로 지정해야하며 이것이 기본 설정보다 어떤 이점도 있습니까? 즉, 구조체가 스택으로 초기화되면 어떤 차이가 있습니까? 즉 GC은 구조체를 이동할 필요가 없습니다. 또한 구조체가 힙에서 초기화 될 때 도움이 될 것입니다 - 즉 일부 클래스의 일부입니까?
제프리 리히터 (Jeffrey Richter)는 C# 2를 통한 CLR에서 COM Interop과 같은 마샬링 시나리오에서 사용되지 않는 구조체에 대해 Layout.Auto를 설정하도록 권장합니다. 이것은 주로 내가이 질문을 한 이유입니다. –
내가 준 예제는 COM Interop과 관련이 없으며 이진 직렬화의 일부 형식 일 수 있습니다. – ParmesanCodice