Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Bob1098 en 6 Septiembre 2015, 17:22 pm



Título: Duda con memoria dinámica y arrays
Publicado por: Bob1098 en 6 Septiembre 2015, 17:22 pm
Estoy revisando el tema de los punteros y la memoria dinámica en C, y me han surgido algunas dudas. Si declaro un array de int estático de digamos, 100 elementos, y no le doy ningún valor, ese array estará ocupando 400 bytes en la memoria según mi código:

Código
  1. #include <stdio.h>
  2.  
  3. int main(int argc, char *argv[])
  4. {
  5. int array[100];
  6.  
  7. printf("%i", sizeof(array));
  8. getch();
  9. return 0;
  10. }
  11.  

Es decir independientemente de que el array estático este lleno o no, siempre va ocupar 400 bytes. Ahora bien, supongo que para eso existe la memoria dinámica. Si quiere tener un array que puede tener como máximo 100 elementos, lo puedo hacer con este código:

Código
  1.        int *array = (int*)malloc(400);
  2.  

Sin embargo, si quiero averiguar su tamaño en memoria siempre me va a dar 4 bytes, ya que un puntero de tipo int siempre va a ocupar 4 bytes. Entonces, ¿cómo sé que esos 400 bytes solo están reservados y no se están ocupando?

Agradecería una respuesta clara y bien explicada, gracias.


Título: Re: Duda con memoria dinámica y arrays
Publicado por: T. Collins en 6 Septiembre 2015, 17:48 pm
Cuál es la diferencia entre reservados y ocupados? Cuando haces malloc el kernel pone esa cantidad de memoria "a nombre" de tu proceso, digamos que esa memoria le pertenece a tu proceso hasta que la libere. Dentro puede tener lo que tu quieras o simplemente la basura que había anteriormente a que la reservaras.

Un array al final es lo mismo, un puntero al primer elemento.


Título: Re: Duda con memoria dinámica y arrays
Publicado por: Bob1098 en 6 Septiembre 2015, 18:01 pm
Lo cual significa que si no conozco el tamaño del array que voy a usar debería usar un puntero dinámico, no?


Título: Re: Duda con memoria dinámica y arrays
Publicado por: T. Collins en 6 Septiembre 2015, 18:11 pm
Sí.


Título: Re: Duda con memoria dinámica y arrays
Publicado por: Bob1098 en 6 Septiembre 2015, 22:04 pm
Vale, gracias por resolver mis dudas. Un saludo!


Título: Re: Duda con memoria dinámica y arrays
Publicado por: furciorifa en 7 Septiembre 2015, 00:00 am
Trata de hacer un malloc(sizeof(int)*CANTIDAD DE ELEMENTOS DE ARRAY);
para que sea más portable, me refiero a que no en todas las computadoras ni todos los procesadores manejan los enteros del mismo tamaño de bytes, para que tengas cuidado


Título: Re: Duda con memoria dinámica y arrays
Publicado por: Bob1098 en 7 Septiembre 2015, 18:47 pm
Trata de hacer un malloc(sizeof(int)*CANTIDAD DE ELEMENTOS DE ARRAY);
para que sea más portable, me refiero a que no en todas las computadoras ni todos los procesadores manejan los enteros del mismo tamaño de bytes, para que tengas cuidado

Si, en esos aspectos me considero "responsable" siempre que haya que especificar el tamaño en bytes de algún tipo de variable utilizo el operador sizeof por si acaso.