Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

342
Vistas
¿Por qué el índice de matriz en .net está limitado por el número extraño 0x7FEFFFFF?

Desde MSDN

El tamaño de la matriz está limitado a un total de 4 mil millones de elementos y a un índice máximo de 0x7FEFFFFF en cualquier dimensión dada (0x7FFFFFC7 para matrices de bytes y matrices de estructuras de un solo byte).

¿Por qué estos números y no otros?

Es decir, no son parejos, ni maxint ni nada por el estilo. ¿Para qué sirve la pieza "cortada"? (0x7F_E_FFFFF = 0x7FFFFFFF - 0x100000 o, para matrices de bytes, 0x7FFFFF_C7 = 0x7FFFFFF_FF - 0x38)

--- editado ---

En la pregunta relacionada ( ¿Por qué el tamaño máximo de byte [] 2 GB - 57 B? ), están hablando de gastos generales. Pero la sobrecarga de 0x10000 no parece un tipo o información de índice, ¿verdad? Por lo tanto, no puedo aceptar la respuesta "porque hay una sobrecarga de tiempo de ejecución". Es como explicar que la sal sabe salada porque contiene una sustancia salada.

Supongo que uno debe ser consciente del razonamiento detrás de los detalles de implementación de .net para explicar realmente ese número.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Por curiosidad, miré la fuente de System.Array y encontré esto:

https://github.com/dotnet/corert/blob/master/src/System.Private.CoreLib/shared/System/Array.cs

 // We impose limits on maximum array lenght in each dimension to allow efficient // implementation of advanced range check elimination in future. // Keep in sync with vm\gcscan.cpp and HashHelpers.MaxPrimeArrayLength. // The constants are defined in this method: inline SIZE_T MaxArrayLength(SIZE_T componentSize) from gcscan // We have different max sizes for arrays with elements of size 1 for backwards compatibility internal const int MaxArrayLength = 0X7FEFFFFF; internal const int MaxByteArrayLength = 0x7FFFFFC7;

Esa fue una versión de .NET 3.1 Core. No dudaría si fuera lo mismo para otras versiones. Aparentemente, la intención es algún tipo de optimización. Quizás alguien podría agregar razones más autorizadas a esta respuesta o publicar otra.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda