[유니티/C#] StructLayout(LayoutKind.Sequential, Size = 12)
프로그래밍/유니티2018. 4. 16. 15:18
안녕하세요. 개발자 드리머즈입니다.
1 2 3 4 5 6 | // Define the structure to be sequential and with the correct byte size (3 ints = 4 bytes * 3 = 12 bytes) [StructLayout(LayoutKind.Sequential, Size = 12)] public struct CvCircle { public int X, Y, Radius; } | cs |
유니티의 C# 코드에서 [StructLayout(LayoutKind.Sequential, Size = 12)]를 처음봐서 뭔지 찾아봤습니다.
이 코드는 유니티(관리 메모리)와 C++(비관리 메모리)의 원활한 통신(마샬링,marshal)을 위해 사용되는 코드로 보입니다.
http://www.sysnet.pe.kr/2/0/1558에 자세한 내용이 있습니다.
Sequential Layout은 Managed Memory에서 마샬링을 사용해 Unmanaged Memory로 옮길 때 각 필드의 순서가 Unmanaged Memory에서 유지되는 레이아웃이다. 위의 예제에서 MyStruct구조체는 [StructLayout(LayoutKind.Sequential)]을 사용하고 있는데, 이는 Managed 메모리 영역에서는 순서가 어떨지 모르지만, Unmanaged Memory로 옮겨질 때는 반드시 필드 순서대로 데이타가 옮겨진다는 것을 의미한다.
C#의 데이터가 순서대로 C++에 전달이 되어야 문제없이 사용가능하므로 [StructLayout(LayoutKind.Sequential, Size = 12)]를 사용합니다.
Size = 12부분은 구조체의 크기를 설정하는 부분 같습니다.
컴파일러?에 따라 12바이트가 안될 수도 있으므로 struct의 크기를 12바이트로 강제 설정하는 코드가 아닐까 추측합니다.
댓글 영역