c# value 타입 배열 만들기
배열은 레퍼런스 타입이다. 레퍼런스 타입은 메모리 매핑을 할 수 없다. 블리터블이 아니기 때문이다.
컴퓨터에서 map은 지도를 그린다는 뜻이 아니다.
(transitive, followed by a “to” phrase) To create a direct relationship to; to create a correspondence with.
wiktionary
직역을 하면 대응하게 만든다는 의미다. 쉽게 설명하면 이미 메모리에 있는 물리적 바이트를 가리키는 포인터를 추가로 만드는 행위다. 예를 들어 앱 1이 메모리에 대이터를 만들고 이걸 매핑한 뒤 그 내용을 앱 2에게 주면 앱 2는 매핑한 대이터 즉 앱 1이 바로 접근하는 변수 이름이 아닌 포인터로 같은 대이터를 이용할 수 있다.
컴퓨터에서만 쓰는 blittable이라는 말은 blit를 할 수 있다는 뜻이다. blit는 bit block transfer를 줄인 말이다. 비트로 구성한 덩어리를 그대로 옮기는 행위를 뜻한다. 예를 들어 string 같은 레퍼런스 타입 대이터는 각 문자를 메모리 각 자리에 비트 형태로 저장하지 않고 시작 위치와 길이 등으로 구성한다. 이걸 매핑하려면 밸류 타입으로 바꿔야 한다.
class TestClass
{
public int[] ints = new int[5];
}
위의 배열을 밸류 타입으로 바꾸면 아래와 같다.
unsafe struct TestStruct
{
public fixed int ints[5];
}
unsafe와 fixed는 같이 써야 한다. 클래스는 그 자체가 레퍼런스 타입이므로 스트럭트로만 가능하다.