• Miércoles 20 de Noviembre de 2024, 14:21

Autor Tema:  Limite De Memoria Usado En C++  (Leído 3305 veces)

scullyERA

  • Miembro activo
  • **
  • Mensajes: 42
  • Nacionalidad: 00
    • Ver Perfil
Limite De Memoria Usado En C++
« en: Viernes 24 de Marzo de 2006, 21:05 »
0
-     Hola a todos. Bueno ahorita estoy haciendo un programa para graficacion en el que necesito cargar puntos desde un archivo y las conexiones desde otro... despues hacer transformaciones en 3D de esa figura (de cada uno de sus puntos) y lo estoy haciendo en turbo c++.
-     Lo que hago es leer en la primera linea el numero de puntos (nPuntos) y guardar los puntos en un vector dinamico de tipo estructura PUNTO

Código: Text
  1. struct PUNTO
  2. {float x,y,z; //coordenadas del punto
  3. };
  4. //... inicio mi programa
  5. PUNTO *puntos; //lista de puntos a cargar
  6. int **aristas; //lista de conexiones entre puntos
  7. //... abro el archivo "puntos.txt"
  8. fscanf (archivoPtr, "%d", &nPuntos); //cargo el no. total de puntos
  9. puntos= new (PUNTO [nPuntos]); //asigno espacio para mis puntos
  10. //... abro el archivo "conex.txt"
  11. aristas= new (int [nPuntos]); //asigno espacio para conexiones
  12. /*... AQUI ME CAUSA PROBLEMAS PUES NO HUBO ESPACIO SUFICIENTE PARA GUARDAR LOS CONEXIONES DE LOS PUNTOS DESDE EL ARCHIVO CONEX.TXT*/
  13.  
  14.  
-     Mi problema es que cuando quiero cargar un archivo de 511 puntos y el archivo de sus conexiones no hay espacio suficiente para guardar todas las conexiones. Sólo si cargo únicamente los puntos de la figura es que mi programa puede continuar y puedo hacer las transformaciones en 3D. Quiero saber si me pueden decir cómo aumento el bloque de memoria que el compilador asigna para que lo pueda usar un ejecutable... por ahí escuché que se usa una instrucción antes del código y se llama DATA, pero no saben la sintaxis y quisiera saber si me pueden ayudar, por favor.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Limite De Memoria Usado En C++
« Respuesta #1 en: Viernes 24 de Marzo de 2006, 21:36 »
0
el problema es que si usas versiones viejas de tc  es posible que estes generando codigo de 16 bit y siendo asi no podras direccionar mas de 640 k de memoria.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

scullyERA

  • Miembro activo
  • **
  • Mensajes: 42
  • Nacionalidad: 00
    • Ver Perfil
Re: Limite De Memoria Usado En C++
« Respuesta #2 en: Viernes 24 de Marzo de 2006, 21:55 »
0
:o Entonces no puedo aumentar la memoria usada por el compilador para mi programa?? Estoy usando el Turbo C++ version 3.0 :(
Qué me recomiendas??

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Limite De Memoria Usado En C++
« Respuesta #3 en: Viernes 24 de Marzo de 2006, 22:43 »
0
no que yo sepa, nmo conozco ninguna 'patraña' que use TC 3.0 para eso-


recomendacion usa visual C++
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

pabloreda

  • Miembro MUY activo
  • ***
  • Mensajes: 125
    • Ver Perfil
    • http://www.reda4.org
Re: Limite De Memoria Usado En C++
« Respuesta #4 en: Viernes 24 de Marzo de 2006, 23:18 »
0
Podrias pasar tu proyecto a Dev-Cpp, anda muy bien y vas a poder direccionar toda la memoria de tu maquina.

Tambien te recomendaria que trabajes sin usar malloc o calloc o new, o minimizando el numero de estos.

PUNTO puntos[10000]; // POR EJEMPLO

te vas a evitar muchos dolores de cabeza !!!  :)

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Limite De Memoria Usado En C++
« Respuesta #5 en: Sábado 25 de Marzo de 2006, 12:42 »
0
Usando memoria estatica tenes la misma restriccion de memoria y la ocupas durante toda la ejecucion del programa/funcion, ademas de perder flexibilidad por supuesto. Si la usas en una funcion recorda que las variables locales se alojan en la pila cuyo tamaño es bastante chico, incluso en S.O. como Windows.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

pabloreda

  • Miembro MUY activo
  • ***
  • Mensajes: 125
    • Ver Perfil
    • http://www.reda4.org
Re: Limite De Memoria Usado En C++
« Respuesta #6 en: Sábado 25 de Marzo de 2006, 14:04 »
0
En realidad es un contrasentido tener que alojar memoria, como si la memoria no estuviera alli !!
La flexibilidad se programa y si esperamos que el sistema operativo la provea estamos fritos.
Fijate que hay un proceso que se llama recolector de basura, el malloc se deberia llamar generador de basura.. :)
por otra parte, es cierto, conviene que los almacenamientos este en variables globales y no el la pila de parametros.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Limite De Memoria Usado En C++
« Respuesta #7 en: Sábado 25 de Marzo de 2006, 14:34 »
0
Cita de: "pabloreda"
En realidad es un contrasentido tener que alojar memoria, como si la memoria no estuviera alli !!
La flexibilidad se programa y si esperamos que el sistema operativo la provea estamos fritos.
Fijate que hay un proceso que se llama recolector de basura, el malloc se deberia llamar generador de basura.. :)
por otra parte, es cierto, conviene que los almacenamientos este en variables globales y no el la pila de parametros.
Si hablamos de S.O. modernos estas equivocado, la memoria RAM (fisica) no es la que reservas sino la memoria virtual. Y realmente no se puede decir que sea flexible un programa con arrays de tamaño fijo, independientemente del S.O. utilizado.

El malloc es una funcion fundamental en cualquier S.O. moderno. Fijate que harias para cargar varios MB de informacion (incluso imagina una base de datos de un par de GB). ¿Un array fijo que ocupa la memoria todo el tiempo?

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Amilius

  • Miembro HIPER activo
  • ****
  • Mensajes: 665
    • Ver Perfil
Re: Limite De Memoria Usado En C++
« Respuesta #8 en: Sábado 25 de Marzo de 2006, 15:28 »
0
Cita de: "Eternal Idol"
Cita de: "pabloreda"
En realidad es un contrasentido tener que alojar memoria, como si la memoria no estuviera alli !!
La flexibilidad se programa y si esperamos que el sistema operativo la provea estamos fritos.
Fijate que hay un proceso que se llama recolector de basura, el malloc se deberia llamar generador de basura.. :)
por otra parte, es cierto, conviene que los almacenamientos este en variables globales y no el la pila de parametros.
Si hablamos de S.O. modernos estas equivocado, la memoria RAM (fisica) no es la que reservas sino la memoria virtual. Y realmente no se puede decir que sea flexible un programa con arrays de tamaño fijo, independientemente del S.O. utilizado.

El malloc es una funcion fundamental en cualquier S.O. moderno. Fijate que harias para cargar varios MB de informacion (incluso imagina una base de datos de un par de GB). ¿Un array fijo que ocupa la memoria todo el tiempo?
Eso muy relativo, todo depende de cuanta memoria RAM tienes en total. Con DOS tienes 640 Kb, reservar 120Kb es un abuso. En estos dias minimo tienes 512 Megas, asi que 120Kb no son nada, pero reservar 375 megas en un bloque contiguo no es para nada una buena idea. Otro factor que ayuda mucho es la programación orientada a objetos que maneja la memoria dinámicamente al crear y destruir objetos. Y aunque a alguno se le ocurra meter un "array estático" de 300 megas dentro de un objeto esa memoria será manejada dinámicamente y no en la pila. Asi aunque "sufra" :P mucho la máquina eventualmente puede ser que funcione. :rolleyes:

Claro que siempre es más cómodo usar un arreglo estático que otra estructura de datos, pero si usas programación orientada a objetos hay formas más inteligentes de hacer algo similar, prácticamente igual de cómodo pero sin severas penalizaciones en rendimiento.

Por ejemplo, aprovechando la POO y la memoria virtual: en lugar de reservar un arreglo estático de objetos puedes reservar un arreglo estático de referencias a objetos y crear todos los objetos referenciados, luego destruir todos los objetos referenciados. Esto es bastante sencillo, no existe administración de memoria complicada. La ventaja es evitar reservar un bloque contiguo de memoria, en lugar de ello reservas varios bloques de menor tamaño y por lo tanto más manejables. A tal punto que eventualmente sólo los objetos que utilices terminarán en RAM mientras que el resto ocupara espacio en memoria virtual, esperando a que los utilices para entrar en RAM.

Otra ventaja es que si necesitas crear más objetos pues simplemente creas otro arreglo de referencias más grande, copias las referencias del arreglo que quedo chico y reservas más objetos.

Al momento de liberar la memoria de un objeto recuerda poner su referencia en la lista en 0 para tener forma de saber que ya lo liberaste cuando liberes todo el arreglo al final.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Limite De Memoria Usado En C++
« Respuesta #9 en: Sábado 25 de Marzo de 2006, 15:38 »
0
Cita de: "Amilius"
Eso muy relativo, todo depende de cuanta memoria RAM tienes en total.

Independientemente del total de memoria en S.O. modernos se trabaja con direcciones virtuales que son traducidas por el microprocesador a direcciones fisicas.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

pabloreda

  • Miembro MUY activo
  • ***
  • Mensajes: 125
    • Ver Perfil
    • http://www.reda4.org
Re: Limite De Memoria Usado En C++
« Respuesta #10 en: Sábado 25 de Marzo de 2006, 20:27 »
0
Es cierto, esto se hizo asi porque antes habia poca memoria ram, entonces convenia tener paginada la memoria para poder guardar y recuper paginas del disco, hoy en dia ese sistema trae mas problemas que soluciones.

alguien le pudo responder a un neofito que significaba error de proteccion general ? y que te entienda ????

La computadora se esta protegiendo de quien ? :blink:

El sistema operativo de la xbox parece que utiliza la memoria lineal, claro gana en velocidad, y es mas facil de programar.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Limite De Memoria Usado En C++
« Respuesta #11 en: Sábado 25 de Marzo de 2006, 21:29 »
0
Cita de: "pabloreda"
El sistema operativo de la xbox parece que utiliza la memoria lineal, claro gana en velocidad, y es mas facil de programar.

Segun esto (http://en.wikipedia.org/wiki/Xbox) la Xbox tiene un Pentium III normal con lo cual la respuesta seria no y teniendo en cuenta que solo tiene 64mb de memoria RAM lo dudo mucho.
¿Usar memoria lineal es mas facil de programar para quien? Para un solo programa puede ser, una consola o S.O. obsoletos. ¿Para multitarea? ¿Dejamos que todos escriban en cualquier direccion de memoria? ¿Dejamos acceso a cualquier programa a estructuras del Kernel? Un puntero no inicializado seria capaz de tirar abajo el sistema. Es necesaria la proteccion de memoria sin lugar a la menor duda y es sinonimo de un sistema robusto.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Amilius

  • Miembro HIPER activo
  • ****
  • Mensajes: 665
    • Ver Perfil
Re: Limite De Memoria Usado En C++
« Respuesta #12 en: Sábado 25 de Marzo de 2006, 21:31 »
0
Cita de: "Eternal Idol"
Cita de: "Amilius"
Eso muy relativo, todo depende de cuanta memoria RAM tienes en total.

Independientemente del total de memoria en S.O. modernos se trabaja con direcciones virtuales que son traducidas por el microprocesador a direcciones fisicas.
Eso ya se. Lo importante es evitar reservar un bloque demasiado grande de memoria contigua tomando en cuenta cuanta RAM tienes. Si no fuera así pudieras trabajar igual con 128 de RAM o 2GB, pero no es asi, si no tienes un mínimo de RAM de acuerdo al software que tienes instalado el disco duro sufre las consecuencias.

Citar
alguien le pudo responder a un neofito que significaba error de proteccion general ? y que te entienda ????

La computadora se esta protegiendo de quien ? blink.gif

Pues simple, dile que se protege del pinche neofito que está metiendo mano en memoria que no le corresponde.  ;)