La Web del Programador: Comunidad de Programadores
 
    Pregunta:  1059 - MEMORIA EN LISTAS EN C++
Autor:  Mauro
Estoy realizando un programa el cual incorpora informacion de un archivo a una lista; la estructura de la lista es
Struct nodo{
unsigned long numero;
char nombre[60];
nodo *next;
}
La lista incorpora hasta 800 elementos y lo que yo necesitaria es que pueda incorporar mas de 5000 elementos.
Desde ya muchas gracias

  Respuesta:  melpomene zeus
No necesitas ni librerias externas, ni preocuparte de modos reales y protegidos. Lo que sí tienes que hacer es usar un modelo de memoria con el segmento de datos de más de 64kb (large, por ejemplo), y tener cuidado de usar punteros far y sus correspondientes funciones de reserva y manejo de memoria (farmalloc, etc). Lo demás es complicarse (más) la vida.

  Respuesta:  Fernando Ramos
Para una aplicación seria, debes pensar en utilizar una libraría profesional para manejo de memoria dinámica.
STL es la mejor opción probablemente, puesto que es mantenida por profesionales de todo el mundo en Internet y además es absolutamente gratis.
La dirección siguiente es de uno de los sitios desde el cual puedes obtener la librería http://www.stlport.org/

Esta versión es especial funciona con muchos compiladores diferentes y aprovecha al máximo sus capacidades.

Con STL no sólo tienes listas, si no vectores, mapas, strings, tablas hash, en fin todas las estructuras de datos que necesites en memoria dinámica y con algorítmos de máxima eficiencia.

El precio a pagar es complejidad, puesto que usan características avanzadas de C++ como los templates.

Provecho!


  Respuesta:  Angel
Struct nodo{
unsigned long numero;
char nombre[60];
nodo *next;
}
No entiendo muy bien cual es tu problema: si puedes almacenar 800 registros porque no vas a poder almacenar 5000. Lo unico que debes vigilar son los recursos fisicos de la memoria, ademas si estas en modo real o protegido,

ten en cuenta que cada nodo ocupa

unsigned long numero = 4 bytes
char nombre[60] = 60 bytes
nodo *next = 4 bytes
-----------
68 bytes

debes tener en cuenta que en modo real (ms-dos, Turbo-c) solo soporta una pagina de memoria 64K, es decir solo podrias almacenar 64000/68=940 registros! A lo mejor es ese tu problema, si te pasas a modo protegido tendras toda la memoria fisica a tu disposición, y no encontrarás ninguna limitación.

taluego, contestame si te he ayudado