Discussion:
Arrays de longitud variable
(demasiado antiguo para responder)
fermath
2004-08-25 10:32:04 UTC
Permalink
Hola,

A ver si alguien me puede ayudar. Ahora el C99 incorpora arrays de
longitud variable. Yo cuando queria una matriz cuya longitud solo conocia
en tiempo de ejecución pues declaraba un doble puntero y luego
malloc o calloc a saco, algo como;

int **matriz;

matriz=calloc(num_filas, sizeof(int *));
for(i=0;i<num_filas;i++)
matriz[i]=calloc(num_columnas,sizeof(int));

Ahora con el C99 todo eso se reduce a

int matriz[num_filas][num_columnas];

La pregunta es: ¿qué es más eficiente en términos de tiempo CPU
consumido (el calloc consume bastante tiempo CPU según creo) y en
términos de gestión de memoria?

Gracias y saludos
Jose Antonio
2004-08-25 12:55:55 UTC
Permalink
Post by fermath
Hola,
A ver si alguien me puede ayudar. Ahora el C99 incorpora arrays de
longitud variable. Yo cuando queria una matriz cuya longitud solo conocia
en tiempo de ejecución pues declaraba un doble puntero y luego
malloc o calloc a saco, algo como;
int **matriz;
matriz=calloc(num_filas, sizeof(int *));
for(i=0;i<num_filas;i++)
matriz[i]=calloc(num_columnas,sizeof(int));
Ahora con el C99 todo eso se reduce a
int matriz[num_filas][num_columnas];
La pregunta es: ¿qué es más eficiente en términos de tiempo CPU
consumido (el calloc consume bastante tiempo CPU según creo) y en
términos de gestión de memoria?
No tiene porqué. Este probablemente traduzca el código a algo parecido
al código que escribes y si no, haz la prueba y desensambla el código.

Probablemente hubieras podido optimizar, si en lugar de hacer num_filas
llamadas a malloc hubieras hecho una sola aunque ello implica saber como
el compilador coloca la memoria.

...malloc (num_columnas*num_filas, sizeof (int))

Las funciones malloc o calloc consumen más tiempo debido a que hay que
hacer una llamada al S.O. para solicitar memoria y este tendrá que
procesar dicha solicitud. En ambos casos, en el primero explicitamente y
otro implicitamente se harán dichas llamadas al S.O. para obtener
memoria y por tanto en lo que a CPU se refiere vendrá a ser lo mismo.


Saludos.

Loading...