C/Visual C - Memoria en C

 
Vista:

Memoria en C

Publicado por Daniel (4 intervenciones) el 11/03/2002 14:38:22
Hola a todos. Estoy haciendo un programa matemático en TurboC que tiene que almacenar miles de números en la memoria. Tengo un problema para almacenar dicha cantidad de números, pero necesito tenerlos en memoria porque el programa es muy complejo y hace muchos cálculos. Uso las funciones malloc y realloc.

Me gustaría saber cómo puedo gestionar más memoria que la asignada para datos, que creo son 64k. Igual hay otras funciones....
Muchas gracias por vuestra ayuda. Por favor, es un poco urgente...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Memoria en C

Publicado por Alvaro (122 intervenciones) el 11/03/2002 18:19:14
Busca información sobre las funciones de manejo de memoria farmalloc (en general las mismas pero con el prefijo 'far')
Estas debieran permitirte tomar toda la memoria disponible.
Espero haberte ayudado...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Memoria en C

Publicado por Daniel (4 intervenciones) el 12/03/2002 02:14:24
Hola Alvaro, muchas gracias. Ayer eché un vistazo a farmalloc y farrealloc. Muchas gracias...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Memoria en C

Publicado por Daniel (4 intervenciones) el 12/03/2002 11:51:07
Nada, usando las funciones farrealloc y farmalloc consigo más memoria, alrededor de 89000 Bytes, necesito más memoria. Si alguien sabe cómo puedo resolverlo. He probado usando windows XP y Windows 98. ¿Alguna idea? Un saludo......
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Memoria en C

Publicado por Josep (29 intervenciones) el 12/03/2002 14:09:57
Tu quieres almacenar N numeros en memoria pero que el espacio que ocupan supera a la asignada. Entonces N debe ser un número muy grande.

Mi consejo no es en ponerlos todos en memoria!! Si no que los pongas en un archivo (o en una base de datos) y que mantengas en memoria sólo los únicos datos que necesites para realizar el cálculo.

Puedes crear una función (o acción) que acceda a un número determinado para colocarlo en la memoria (y ser usado posteriormente). Es que no sé bien qué estás haciendo ni nada ... y creo que un posible ejemplo de lo que digo podria ser esto:

long double ldValor1, ldValor2, ldResultado;
FILE* idArchivo;

idArchivo = openArchivoDatos();

ldValor1 = getFileValor( idArchivo, 12);
/* obtiene el valor 12 de los miles que hay*/
ldValor2 = getFileValor( idArchivo, 12000);
ldResultado = ldValor1 + ldValor2;

closeArchivoDatos(idArchivo);

Acceder a un archivo tiene su coste por el acceso a un disco magnetico y esto, a la larga, puede repercutir en la velocidad. Pero yo prefiero que mi programa sea lento que no que "aborte" por falta de memoria y que no me deje realizar ningun calculo.

Orientame más en tu problema y veré que puedo hacer (si es que puedo hacer algo, claro está)

Espero haberte ayudado en tu pregunta
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Memoria en C

Publicado por Daniel (4 intervenciones) el 12/03/2002 15:20:50
Hola, muchas gracias por tu interés. La cantidad de valores que quiero tratar es bastante grande. He hecho estimaciones y calculo que necesito un mega y medio.

Al final, si no existe otra solución, terminaré haciéndolo usando archivos con su correspondiente coste de tiempo. Me da pena tener 512 Mb de RAM y no poder usarlos, lástima.

Estoy haciendo un ensayo para resolver un problema de ingeniería en el que tengo que tener acceso director a cada elemento. El número de cálculos es enorme, pues el número de valores está en torno a diez mil, valores que son estructuras, que contienen a parte de un valor en doble precisión, relaciones de niveles.... Lo he optimizado para no usar un bit de más, pero ni así. Me da para 4 niveles.

Bueno, un saludo y muchísimas gracias por tu interés. Algo que me
resolvería el problema de tiempo es saber si se puede acceder a un elemento de un archivo de forma directa, es decir, a través de un indice.
Usando lo que sé de archivos, cada vez que tengo que acceder a un elemento, tengo que leer los anteriores. Quizá me falta base trabajando
con archivos. Un saludo,
Daniel.

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar