Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

335
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda