Foros del Web » Programación para mayores de 30 ;) » C/C++ »

¿cuanta memoria dinamica puedo reservar?

Estas en el tema de ¿cuanta memoria dinamica puedo reservar? en el foro de C/C++ en Foros del Web. Buenas, La cosa es que tengo que leer imagenes desde un chip RFID ,procesarlas, y representarlas por pantalla. La norma dice que pueden ocupar sobre ...
  #1 (permalink)  
Antiguo 19/11/2010, 05:27
 
Fecha de Ingreso: noviembre-2010
Mensajes: 7
Antigüedad: 14 años, 1 mes
Puntos: 0
Pregunta ¿cuanta memoria dinamica puedo reservar?

Buenas,

La cosa es que tengo que leer imagenes desde un chip RFID ,procesarlas, y representarlas por pantalla. La norma dice que pueden ocupar sobre 640 Kbytes aunque las que he leido por ahora no pasan de 120 Kbytes (formato JPEG2000)

¿Como podria asegurarme de que no me quedo corto de memoria? Como no se que tamaño tendrán, hago una reserva de 128Kbytes con malloc().
Código:
unsigned char *imagen;

imagen= (unsigned char*)malloc(128*1024);

Me gustaría saber si hay mejores opciones. Si se puede hacer una reserva indefinida sin que suponga riesgos, tal vez con new y delete, operadores que todavía no me acostumbro a usar.

Muchas gracias.
  #2 (permalink)  
Antiguo 19/11/2010, 06:33
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 8 meses
Puntos: 228
Respuesta: ¿cuanta memoria dinamica puedo reservar?

NO hay forma de que el chip te diga cuanto opupa la imgagen??

LA otra seria detectar cuando te quedaste corto y usar realloc. Realloc lo que hace es agrandar la memoria reservada y te mantiene la informacion.

http://www.cplusplus.com/reference/c...tdlib/realloc/
  #3 (permalink)  
Antiguo 19/11/2010, 16:44
 
Fecha de Ingreso: noviembre-2010
Mensajes: 7
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: ¿cuanta memoria dinamica puedo reservar?

gracias, la cabecera de imagen indica el tamaño de la misma, yo siempre leo en primer lugar la cabecera y despues el resto. Sin embargo la reserva de memoria la tengo que hacer antes de llamar a las funciones de la clase Lectura. Te lo explico mejor:

Código:
//funcion para lectura:
read_ef(unsigned char *buf, unsigned int * len);

//realizo la llamada a esta función pasándole los parametros:
unsigned int longitud= 128*1024;
unsigned char* imagen = (unsigned char*) malloc(longitud);
read_ef(imagen,longitud);
//la función modifica el campo longitud con la real obtenida.
¿hay posibilidad de hacer realloc del parámetro imagen pasado a la función, dentro de la propia función?

gracias.
  #4 (permalink)  
Antiguo 19/11/2010, 18:19
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 8 meses
Puntos: 228
Respuesta: ¿cuanta memoria dinamica puedo reservar?

Si se puede. Tenes la definicion de la funcion read_ef??
  #5 (permalink)  
Antiguo 20/11/2010, 05:45
 
Fecha de Ingreso: noviembre-2010
Mensajes: 7
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: ¿cuanta memoria dinamica puedo reservar?

Sí, la función read_ef la implementé yo. Esto es lo que hace:

1) Lee los 6 bytes de cabecera : Rótulo (2 bytes) + Longitud Fichero (4 bytes) .
2)Llamo a una función pre_len() que me devuelve un entero con la longitud indicada por los 4 bytes que la codifican.
3) Bucle while() que empieza a leer tramas (máximo: 256 bytes) hasta completar el fichero.

como antes de entrar a while() ya tengo la longitud real,¿ podría hacer un realloc en ese punto?

Código:
read_ef (unsigned char * buf, unsigned int * len){
    
    //....leo los primeros 6 bytes y los almaceno en buf
    //Almaceno en len la longitud del fichero EF:
     pre_len(buf,len);
   
    //¿hago realloc aquí? pero a donde apunta buf ya tengo 6 bytes almacenados
    buf=(unsigned char*)realloc(buf,len);
   
   //Para len<128*1024 estaré reduciendo memoria reservada no? podria evitarlo 
   // con un if (len>128*1024)
  
   while(1){
     //leo resto de datos almacenando en buf.......
   }

}
Me queda la duda de si se puede realocar memoria en la que ya he almacenado 6 bytes, sin perder los datos. Gracias.
  #6 (permalink)  
Antiguo 20/11/2010, 05:51
 
Fecha de Ingreso: noviembre-2010
Mensajes: 7
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: ¿cuanta memoria dinamica puedo reservar?

Cita:
Iniciado por sam90 Ver Mensaje
NO hay forma de que el chip te diga cuanto opupa la imgagen??

LA otra seria detectar cuando te quedaste corto y usar realloc. Realloc lo que hace es agrandar la memoria reservada y te mantiene la informacion.

[url]http://www.cplusplus.com/reference/clibrary/cstdlib/realloc/[/url]
Uiiii, ya me habías dicho que te mantiene la información, pues nada, solo que queda saber, si es correcto así, gracias de nuevo.
  #7 (permalink)  
Antiguo 20/11/2010, 07:40
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 8 meses
Puntos: 228
Respuesta: ¿cuanta memoria dinamica puedo reservar?

Igualmente porque no haces las reserva de la memoria despues de leer la cabecera. Ahi te dira cuantos bytes tienes que reservar y listo. Luego devuelves el puntero que reservaste.
  #8 (permalink)  
Antiguo 20/11/2010, 15:02
 
Fecha de Ingreso: noviembre-2010
Mensajes: 7
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: ¿cuanta memoria dinamica puedo reservar?

pero entonces el puntero char* imagen no lo inicializo antes de enviarlo como parámetro. ¿sería correcto declararlo y pasaraselo a la función sin más?.
  #9 (permalink)  
Antiguo 20/11/2010, 18:21
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 8 meses
Puntos: 228
Respuesta: ¿cuanta memoria dinamica puedo reservar?

ES que no se lo pasas nunca. Se declara dentro de la funcion y luego lo devolves.

Código C:
Ver original
  1. char * lector()
  2. {
  3.    char * dattos;
  4.    int cantidad = leer_encabezado_y_extraer_longitud();
  5.    dattos = malloc(cantidad);
  6.    //Procesamiento de datos
  7.    return dattos;
  8. }

Ese es el esquema general.
  #10 (permalink)  
Antiguo 21/11/2010, 03:53
 
Fecha de Ingreso: noviembre-2010
Mensajes: 7
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: ¿cuanta memoria dinamica puedo reservar?

muchas gracias, me ayudaste muchisimo. Por último, te quería preguntar por el propio título de este tema, ¿puedo reservar 1 mega de memoria RAM sin problemas? La normativa pone el límite de foto en 650kb.

Porque Una facil solución sin tocar código sería reservar 700 kb de RAM y tenerlo de repositorio fijo para las imagenes que voy leyendo y pasando al disco duro.
  #11 (permalink)  
Antiguo 21/11/2010, 09:02
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 8 meses
Puntos: 228
Respuesta: ¿cuanta memoria dinamica puedo reservar?

Esa duda se resuelve probando. Reserva un mega y averigualo. Deberias poder.
  #12 (permalink)  
Antiguo 21/11/2010, 18:14
 
Fecha de Ingreso: noviembre-2010
Mensajes: 7
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: ¿cuanta memoria dinamica puedo reservar?

Cita:
Iniciado por sam90 Ver Mensaje
Esa duda se resuelve probando. Reserva un mega y averigualo. Deberias poder.
Gracias por toda tu ayuda, la verdad es que con esta aplicación no me puedo fiar de las pruebas. A veces se me bloquea de forma aleatoria porque el virtual COM deja de responder. Por eso necesitaba saber seguro, si pasa aalgo por hacer reservas de 1 mega.
  #13 (permalink)  
Antiguo 21/11/2010, 18:21
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 8 meses
Puntos: 228
Respuesta: ¿cuanta memoria dinamica puedo reservar?

Probalo en un programa aparte.
Igualmente no tiene que haber ningún inconveniente en reservar un mega de memoria.

Etiquetas: dinamica, memoria
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:05.