¿Cuál fue el razonamiento detrás de no almacenar explícitamente la longitud de una matriz con una matriz en C
?
A mi modo de ver, hay razones abrumadoras para hacerlo, pero no muchas en apoyo del estándar (C89). Por ejemplo:
- Tener longitud disponible en un búfer puede evitar el desbordamiento del búfer.
- Un estilo Java
arr.length
es claro y evita que el programador tenga que mantener muchosint
s en la pila si se trata de varias matrices. - Los parámetros de la función se vuelven más convincentes.
Pero quizás la razón más motivadora, en mi opinión, es que generalmente no se ahorra espacio sin mantener la longitud. Me aventuraría a decir que la mayoría de los usos de las matrices implican una asignación dinámica. Es cierto que puede haber algunos casos en los que las personas usan una matriz asignada en la pila, pero esa es solo una llamada de función *: la pila puede manejar 4 u 8 bytes adicionales.
Dado que el administrador de almacenamiento dinámico tiene que rastrear el tamaño de bloque libre utilizado por la matriz asignada dinámicamente de todos modos, ¿por qué no hacer que esa información sea utilizable (y agregar la regla adicional, verificada en el momento de la compilación, que uno no puede manipular la longitud explícitamente a menos que uno lo haga)? gusta dispararse en el pie).
La única cosa que puedo pensar en el otro lado es que no hay seguimiento longitud puede haber hecho compiladores más simple, pero no que mucho más simple.
* Técnicamente, se podría escribir algún tipo de función recursiva con una matriz con almacenamiento automático, y en este caso (muy elaborado) el almacenamiento de la longitud puede resultar en un mayor uso del espacio.
malloc()
puede solicitar el tamaño de un área ed de manera portátil?" Eso es algo que me hace preguntarme varias veces.