나는 연속 레이아웃이 여러 구조체가 : , 위의 구조체 유형에 대한 Marshal.SizeOf
를 호출Marshal.SizeOf은 추가 바이트를 제공
struct S1
{
Guid id;
}
struct S2
{
Guid id;
short s;
}
struct S3
{
Guid id;
short s;
short t;
}
를 내가 가지고 :
Size:
S1 = 16, as expected.
S2 = 20, copied an instance to a byte array, it only occupies first 18 bytes.
S3 = 20.
내 질문을 그 이유는 S2의 크기가 20이지만 18이 아닌 이유입니다. 그리고이 문제는 Guid
이 구조체에있을 때만 나타납니다.
죄송합니다. msdn에서 유용한 정보를 찾을 수 없습니다. 나는 Marshal.SizeOf
이 메모리에서 차지할 공간의 크기를 알려주지 만 크기를 4의 배수로 만들려면 2 여분의 바이트가 필요한 이유를 알고 싶습니다.
그리고이 "문제"를 어떻게 피할 수 있습니까?
고맙습니다.
@Hans Passant의 구조 메모리 레이아웃에 대한 매우 철저한 [답] (http://stackoverflow.com/a/3362736/1289454)을보십시오. Marhsal.SizeOf는 단지 추측 할 수 있다고 주장한다. – gowansg