2010-05-03 11 views
8

Me gustaría saber cómo se gestiona una matriz de longitud variable (qué variables extra o estructuras de datos se mantienen en la pila para tener matrices de longitud variable).Arreglo de longitud variable

Muchas gracias.

Respuesta

4

Es simplemente una matriz de tamaño dinámico (depende de la implementación, pero más comúnmente en la pila). Es bastante similar a alloca en los viejos tiempos, con la excepción de que sizeof devolverá el tamaño real de la matriz, lo que implica que el tamaño de la matriz también debe almacenarse en algún lugar (también depende de la implementación, pero probablemente en la pila)

+1

Eso no es del todo cierto, porque no había forma de interrogar el tamaño de una matriz 'alloca()' después de que se había creado, pero 'sizeof' funciona en VLA (por lo tanto, usted llama 'sizeof' en la matriz, ese tamaño debe mantenerse en algún lugar). – caf

+0

@caf: buen punto - Supongo que el tamaño también necesita almacenarse en algún lugar (depende de la implementación) entonces - Actualizaré mi respuesta. –

1

El tamaño de las matrices de longitud variable se determina en tiempo de ejecución, en lugar de tiempo de compilación.
La forma en que se gestiona depende del compilador.
GCC, por ejemplo, asigna memoria en la pila.
Pero no hay una estructura especial. Es solo una matriz normal, cuyo tamaño se conoce en tiempo de ejecución.

-2

alternativamente puede usar algunos contenedores, p. ArrayList en java o vector en c/C++

+0

-1 no tiene nada que ver con la pregunta (cómo se puede implementar una característica de C99). –

Cuestiones relacionadas