C/Visual C - Mensaje para Endos

 
Vista:

Mensaje para Endos

Publicado por Omar Olivas (4 intervenciones) el 23/08/2000 00:00:00
Hola Endos:

Soy la persona que pidio ayuda sobre apuntadores para subir un inmenso archivo de texto a memoria, y que me sugeriste usar un char far o un char huge.
Muchas gracias por tu ayuda, pero temo decirte que no funcionó. Intente de todo:
char far **
char * far *
char **far
Lo mismo hice con el huge.
Te agradeceria me comentaras como puedo solucionar este problema.
Ahhhh, si, es para DOS, estoy usando Turbo C++ 3.0.

De antemano muchas gracias.
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:Mensaje para Endos

Publicado por Endos (143 intervenciones) el 23/08/2000 00:00:00
Si es realmente muy inmenso es posible que no haya suficiente memoria
para cargarlo. Debes pensar que el Dos solo direcciona el primer mega de memoria
y de este tan solo los primeros 640Kb estan libres para que los usen los
programas, aunque esta cifra siempre se ve bastante reducida por los
diversos programas o partes del mismo sistema operativo que se cargan en esa zona.
Otra cosa que debes tener en cuenta es el espacio consumido por el compilador.
No es lo mismo que ejecutes tu aplicacion desde el Turbo C que desde la
linea de comandos del Dos. Aunque existia una forma de configurarlo en la que no
habia casi diferencias...

El siguiente codigo muestra la idea de como hacerlo:

int main()
{
cha far *ArchivoEnMemoria;
long bucle;

// Asignar memoria lejana
ArchivoEnMemoria=(char far*) farmalloc(BytesNecesarios);

if(ArchivoEnMemoria==NULL) // Comprobar asignacion
{
printf("No hay suficiente memoria\n");
return -1;
}

// Aqui lo que tienes que leer dentro del buffer
// Por ejemplo aqui se muestra la forma de usar el puntero correctamente
// Uso typecasting a tipo huge para evitar que la superacion de un segmento
// produzca una escritura en una posicion erronea

for(bucle=0; bucle<BytesNecesarios; bucle++)
*((char huge *) ArchivoEnMemoria+bucle)=LeerByteArchivo();

// Aqui usarias el contenido cargado en memoria...

LlamarFuncionesNecesarias();
...

// Aqui ya termina el programa y hay que liberar la memoria

farfree(ArchivoEnMemoria);

return 0; // End
}

Si no recuerdo mal para que el compilador haga ´swapping´ y deje casi toda la
memoria libre y no tengas que estar saliendo del mismo cada vez que ejecutes
tu aplicacion, solo tienes que desactivar el debugger.
Menu: ´Options|Debugger´ opcion ´Source Debugging´ puesta como ´none´.
Evidentemente con esto asi no puedes depurar el codigo.

Espero te funcione. Si no lo consigues vuelve a escribir aqui al foro.

Saludos,
Endos.
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