언어/C#

Blittable Types

tsyang 2023. 5. 13. 21:00

Blittable Type이란 .NET Framework에서 사용하는 데이터 타입들로, 대충보면 int, float, double... 과 같은 애들이 포함되어 있음.

 

그러면 이걸 굳이 왜 정의해놓았느냐? 하면 Blittable Type들이 다른 애들보다 마샬링할 때 더 효율적이기 때문이다.

 

마샬링이란 어떤 오브젝트의 메모리 데이터를 전송/보관에 용이하도록 변환하는 행위를 의미한다. 당연히 서로 다른 프로그램 사이에 데이터를 교환하는 경우에도 마샬링이 사용됨.

 

서로 다른 프로그램이라면 데이터를 표현하는 방법도 다를 수 있는데, 이 때 managed memory와 unmanaged memory에서 동일한 데이터 표현방식을 갖는 애들이 Blittable Type임.

 

이런 BlittableType은 마샬링 할때 별도 변환 처리가 필요 없음! 그냥 바로 쓰면 된다. 그래서 효율적이다.

 

유니티에서는 native code(umanaged)와 managed code사이를 넘나들때 쓴다. 특히 유니티의 Job System을 사용하며 멀티쓰레딩 코드를 작성한다면 Job에 넘겨줄 데이터를 blittable로 써야한다. 유니티 Job System에서는 Safety를 위해 데이터를 복사하는데 이를 위해 사용 가능한 타입들을 blittable로 제한해둔 것이다.

 

Blittable에는 Byte, Int(16,32,64), IntPtr, Single(float), Double등이 있다. 주의할 점은 C#의 System.Char(=char)은 blittable이 아니라는 것!

 

그리고 추가적으로 위 타입들의 1차원 배열이나, Blittable type들만으로 이뤄져 있는 complex type도 Blittable이다.

 

 

'언어 > C#' 카테고리의 다른 글

Dynamic 타입  (0) 2024.01.14
CLR? .NET? Mono?  (0) 2023.10.01
beforefieldinit  (0) 2023.04.23
(C# 7.2) Span<T>  (0) 2022.08.07
C# async/await  (0) 2022.06.12