variable true que lenguaje false bool c# boolean

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); }