Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

334
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!