Тест: что печатает следующая программа?
using System;
using System.Runtime.InteropServices;
namespace ConsoleApplication2 {
[StructLayout(LayoutKind.Sequential, Pack=1)]
struct Struct1 {
bool b;
int i;
}
[StructLayout(LayoutKind.Sequential, Pack=1)]
struct Struct2 {
byte b;
int i;
}
class Program {
static void Main(string[] args) {
Console.WriteLine(Marshal.SizeOf(typeof(Struct1)));
Console.WriteLine(Marshal.SizeOf(typeof(Struct2)));
Console.ReadKey();
}
}
}
Ответ:
8
5
Это меня очень смущает. И bool, и byte имеют размер 1 байт, и указание [StructLayout(LayoutKind.Sequential, Pack=1)]
должно свести на нет любые проблемы с заполнением. Обе структуры должны быть 5 байтов. Итак, у меня есть два вопроса:
- Почему сортировка работает таким образом?
- Есть обходной путь? У меня есть 1-байтовые логические значения в нативных структурах, которые мне нужно импортировать. Вместо этого я могу использовать байт, но он "грязный".
Спасибо.