elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Gestión dinámica memoria
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Gestión dinámica memoria  (Leído 2,309 veces)
terrateck

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Gestión dinámica memoria
« en: 9 Enero 2014, 04:32 am »

Hola a todos, me gustaría plantear la siguiente cuestión:

Tengo un fichero de texto en el que cada linea corresponde a un registro de tipo Struct, y necesito leer y almacenar cada uno de esos registros en memoria.
El problema es que de antemano no sé el número de registros que tendrá el fichero, por lo que no puedo establecer el número de celdas que tendrá el array de tipo Struct.

¿Cual sería la manera más optima de crear el array sin desperdiciar memoria?
He pensado que quizá podría contar el número de lineas del fichero y luego volver al comienzo de nuevo. ¿Alguna otra solución?


Saludos.


« Última modificación: 9 Enero 2014, 04:44 am por terrateck » En línea

naderST


Desconectado Desconectado

Mensajes: 625



Ver Perfil WWW
Re: Gestión dinámica memoria
« Respuesta #1 en: 9 Enero 2014, 05:02 am »

Puedes obtener el tamaño del fichero, luego esto lo divides entre el tamaño del registro y te dará la cantidad de registros que hay en el fichero, es decir, el tamaño de tu arreglo.

Ejemplo: Supongamos que tu estructura pesa 4 bytes y el fichero pesa 12 bytes quiere decir que en el fichero hay 3 registros.


En línea

terrateck

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Re: Gestión dinámica memoria
« Respuesta #2 en: 9 Enero 2014, 05:17 am »

Gracias por tu respuesta naderST.

Parece una buena idea. ¿Hay alguna función que permita obtener directamente el tamaño de un fichero abierto?
En línea

naderST


Desconectado Desconectado

Mensajes: 625



Ver Perfil WWW
Re: Gestión dinámica memoria
« Respuesta #3 en: 9 Enero 2014, 05:22 am »

No, no hay una función que te permita hacer eso, lo más común es posicionarte al final de archivo y con la función ftell obtienes la posición actual que en este caso sería el tamaño del archivo en bytes.
En línea

terrateck

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Re: Gestión dinámica memoria
« Respuesta #4 en: 9 Enero 2014, 06:23 am »

El problema es que cada registro no ocupa el mismo espacio dentro del fichero, ya que posee números y cadenas de caracteres de longitud variable. Y estoy trabando en modo texto, no binario.
« Última modificación: 9 Enero 2014, 06:25 am por terrateck » En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Gestión dinámica memoria
« Respuesta #5 en: 9 Enero 2014, 06:53 am »

..................................................................

¿Cual sería la manera más optima de crear el array sin desperdiciar memoria?
He pensado que quizá podría contar el número de lineas del fichero y luego volver al comienzo de nuevo. ¿Alguna otra solución?
..............................................


Bien lo que propones o crear array con memoria dinámica y luego con calloc ampliar la memoria si necesitas más.

Saluditos! ..... !!!!       

En línea

naderST


Desconectado Desconectado

Mensajes: 625



Ver Perfil WWW
Re: Gestión dinámica memoria
« Respuesta #6 en: 9 Enero 2014, 22:04 pm »

Puedes crear una cabecera para cada registro donde te indique el tamaño real del registro, es decir, que sea una estructura con un campo donde te de el tamaño en bytes del registro real y así puedes ir leyendo hasta almacenar todos los registros en un arreglo dinámico.
En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Gestión dinámica memoria
« Respuesta #7 en: 9 Enero 2014, 22:22 pm »

Puedes crear una cabecera para cada registro donde te indique el tamaño real del registro, es decir, que sea una estructura con un campo donde te de el tamaño en bytes del registro real y así puedes ir leyendo hasta almacenar todos los registros en un arreglo dinámico.
Creo que es de las soluciones más eficientes.
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
terrateck

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Re: Gestión dinámica memoria
« Respuesta #8 en: 10 Enero 2014, 18:38 pm »

Gracias, estudiaré adoptar estas soluciones.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Asignacion Dinamica Memoria
Programación C/C++
charmedever 5 3,427 Último mensaje 21 Octubre 2011, 05:25 am
por charmedever
Memoria dinámica
Programación C/C++
eleon 6 4,805 Último mensaje 24 Enero 2012, 22:17 pm
por Eternal Idol
Aprender gestión de memoria&procesos
Windows
ccrunch 0 1,351 Último mensaje 11 Julio 2012, 02:04 am
por ccrunch
Duda sobre gestion de memoria en contenedores LXC
GNU/Linux
debian_mx 0 1,578 Último mensaje 1 Octubre 2018, 20:48 pm
por debian_mx
Mozilla mejorará la gestión de memoria en Firefox resolviendo un bug reportado..
Noticias
wolfbcn 0 840 Último mensaje 6 Marzo 2019, 14:24 pm
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines