true - public bool c#
TamaƱo booleano primitivo en C# (2)
En C # se almacenan como 1 byte en una matriz o en un campo, pero curiosamente son 4 bytes cuando son variables locales. Creo que el 1 byte de bool se define en algún lugar de la documentación .NET a diferencia de Java. Supongo que el motivo de los 4 bytes para las variables locales es evitar el enmascaramiento de los bits al leer 32 bits en un registro. Aún así, el operador sizeof muestra 1 byte porque es el único tamaño relevante y todo lo demás es un detalle de implementación.
¿Cómo se almacenan las variables booleanas en C # en la memoria? Es decir, ¿se almacenan como un byte y los otros 7 bits se desperdician o, en el caso de matrices, se agrupan en bloques de 1 byte de valores booleanos?
Esto responde a la misma pregunta con respecto a Java ( ¿Por qué el tamaño primitivo booleano de Java no está definido? ). ¿Son Java y C # lo mismo en este aspecto?
En C #, ciertamente los bits no se empaquetan de forma predeterminada, por lo que varios campos bool tomarán 1 byte. Puede usar BitVector32
, BitArray
o simplemente aritmética a nivel de bits para reducir esta sobrecarga. Como me parece recordar que las variables toman 4 bytes (esencialmente manejados como int
= Int32
).
Por ejemplo, los siguientes conjuntos i
a 4:
struct Foo
{
public bool A, B, C, D;
}
static unsafe void Main()
{
int i = sizeof(Foo);
}