variable sirve sintaxis reservada que programacion para palabra negativo long float example c# arrays byte unsafe

c# - sintaxis - para que sirve int en programacion



Longitud máxima de byte[]? (4)

Estoy tratando de crear una matriz de byte cuya longitud es UInt32.MaxValue . Esta matriz es esencialmente una pequeña (ish) base de datos en memoria:

byte[] countryCodes = new byte[UInt32.MaxValue];

En mi máquina, sin embargo, en tiempo de ejecución, obtengo una System.OverflowException con "operación aritmética que resultó en un desbordamiento".

¿Cual es el trato? ¿Necesito usar un bloque unsafe y malloc ? ¿Cómo haría eso en C #?


En .NET 4.5 La longitud máxima instantánea de una matriz de bytes es: 2147483591, o 56 menos que int.MaxValue. Encontrado a través de:

for (int i = int.MaxValue; i > 0; i--) { try { byte[] b = new byte[i]; Console.Out.WriteLine("MaxValue: " + i); Environment.Exit(0); } catch (Exception ignored) {} }


La implementación actual de System.Array utiliza Int32 para todos sus contadores internos, etc., por lo que el número máximo teórico de elementos es Int32.MaxValue .

También hay un límite de 2 GB de tamaño máximo por objeto impuesto por el CLR de Microsoft.

Una buena discusión y solución aquí ...

Y algunas preguntas y respuestas relacionadas, no del todo duplicadas aquí ...


La longitud máxima de una matriz de bytes es: 2130702268. por ejemplo:

var countryCodes = new byte[2130702268];


Yo no haría esto en primer lugar. ¿Por qué querría poner toda esa memoria a un lado para esta base de datos en memoria? ¿No preferiría tampoco una estructura de datos con incrementos de tamaño a medida que avanza (por ejemplo, List<int> )? ¿O (si lo prefiere) usar una base de datos en memoria como sqlite ?