2011-07-29 2 views
2

내 컴퓨터에서 네트워크 메시지를 전달하기 위해 LayoutKind.Explicit 특성을 사용하여 의사 공용 구조체로 C# 구조체를 사용하고 있습니다. 기본 크기의 레이아웃을 사용하는 방법을 알고 있습니다.배열을 포함하는 구조체의 크기

그러나 char 배열 인 필드 중 하나를 사용하면 어떻게 될까요? 나는 char가 데이터의 2 바이트 (유니 코드 형식 일 때)라는 것을 알고 있지만, char []는 얼마나 큰가? 이것이 참조 유형이라고 믿는 것이 맞습니까? 그 크기는 단지 항목 수 * 2가 아닙니다.

어떻게 구조체를 레이아웃합니까? 심지어 가능할까요?

답변

4

크기는 참조 폭입니다. 따라서 x86에서는 4 바이트, x64에서는 8 바이트입니다. 배열의 크기는 배열이 힙에 별도로 저장되므로 관련이 없습니다. 의 데이터를 바이트 스트림으로 직렬화하려는 경우 데이터에 인 인코딩을 사용하는 것으로 결정됩니다. UTF16은 실제로 2 * 문자 수이지만 UTF8 또는 UTF32는 다를 것입니다.

+0

대단히 고마워요. 내 생각을 확인해주었습니다. 참조 크기는 컴파일 된 설정에 따라 다르며 실행되는 시스템이 아닌 올바른 것입니까? 따라서 32 비트 어셈블리는 64 비트 OS에서 실행될 때에도 4 바이트의 레퍼런스 크기를 갖습니다. – Venatu

+0

@Venatu 런타임, 컴파일 타임이 아닙니다. 따라서 OS 의존적입니다. 당신은 특정 CPU를 대상으로하여 런타임을 선택하는 것을 돕는다. (가능하다면) –

0

이상한데, 길이와 문자 당 바이트 수를 같게해서는 안됩니까?

+1

.NET 문자는 명시 적으로 UTF-16이기 때문에 문자 당 바이트 수는 2이다. –

관련 문제