У меня есть две структуры с массивами байтов и булевых:
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, Pack = 4)]
struct struct1
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
public byte[] values;
}
[StructLayout(LayoutKind.Sequential, Pack = 4)]
struct struct2
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
public bool[] values;
}
И следующий код:
class main
{
public static void Main()
{
Console.WriteLine("sizeof array of bytes: "+Marshal.SizeOf(typeof(struct1)));
Console.WriteLine("sizeof array of bools: " + Marshal.SizeOf(typeof(struct2)));
Console.ReadKey();
}
}
Это дает мне следующий результат:
sizeof array of bytes: 3
sizeof array of bools: 12
Кажется, что boolean
занимает 4 байта памяти. В идеале a boolean
будет принимать только один бит (false
или true
, 0
или 1
и т.д.).
Что здесь происходит? Действительно ли тип boolean
настолько неэффективен?