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

Entendiendo alojamiento de memoria - C++

Estas en el tema de Entendiendo alojamiento de memoria - C++ en el foro de C/C++ en Foros del Web. Hola a todos. Entiendo que existen tres modos de alojar memoria: de manera estática en el stack, de manera dinámica en el stack y de ...
  #1 (permalink)  
Antiguo 16/08/2010, 18:12
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años
Puntos: 9
Entendiendo alojamiento de memoria - C++

Hola a todos.
Entiendo que existen tres modos de alojar memoria: de manera estática en el stack, de manera dinámica en el stack y de manera dinámica en el heap.
No entiendo cuál de estas operaciones se llevaría a cabo en las siguientes sentencias y cómo se liberaría la memoria alojada luego de hacer uso de esta:

Código C++:
Ver original
  1. class MyClass1
  2. {
  3.       int intArray[10];
  4.       ...
  5. }
  6.  
  7. class MyClass2
  8. {
  9.       int* intArray;
  10.       ...
  11. }
  12.  
  13. class MyClass3
  14. {
  15.       OtherClass anotherObject;
  16.       ...
  17. }
  18.  
  19. class MyClass4
  20. {
  21.       OtherClass* anotherObject;
  22.       ...
  23.       public:
  24.           void TestMethod();
  25. }
  26.  
  27. void MyClass4::TestMethod()
  28. {
  29.      OtherClass* localObject = new OtherClass;
  30. }

Muchas gracias por adelantado.
Saludos.
__________________
Add, never Remove
  #2 (permalink)  
Antiguo 17/08/2010, 11:43
Avatar de calambrenet  
Fecha de Ingreso: julio-2010
Ubicación: Jaén
Mensajes: 162
Antigüedad: 13 años, 9 meses
Puntos: 18
Respuesta: Entendiendo alojamiento de memoria - C++

¿De qué sistema operativo estamos hablando?
un punto muy importante...
  #3 (permalink)  
Antiguo 17/08/2010, 15:38
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años
Puntos: 9
Respuesta: Entendiendo alojamiento de memoria - C++

Me interesa saberlo en Windows y Mac.
__________________
Add, never Remove
  #4 (permalink)  
Antiguo 18/08/2010, 05:21
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 13 años, 10 meses
Puntos: 73
Respuesta: Entendiendo alojamiento de memoria - C++

Por lo que yo he podido ver hasta ahora, la memoria, al ejecutar un programa C/C++, se organizxa de la siguiente manera (comenzando por las posiciones de memoria más bajas):

En primer lugar, el código del programa.

A continuación, el espacio necesario para las variables globales y estáticas (las declaradas como static, dentro o fuera de las funciones). Estas se inician a cero en la mayoría de sistemas.

Después, el heap. Aquí es donde se guardan los bloques de memoria reservados de forma dinámica (con malloc/new, u otras funciones de esta familia). El espacio ocupado en el heap crece hacia arriba, en teoría puede llenafrse toda la memoria disponible.

Finalmente, el stack. Comienza en la dirección de memoria más alta disponible para la aplicación, y crece hacia abajo. Aquí se guardan las direcciones de retorno de las llamadas a función, los parámetros pasados a las funciones y las variables locales de las funciones.

Cuando el heap está lleno (no se puede asignar la cantidad de memoria que se ha solicitado), se devuelve un puntero nulo. Esto no debe generar problemas si se comprueba la validez del puintero devuelto y se trata adecuadamente.

Los problemas con la pila suelen tener dos orígenes. Uno es el empleo excesivo de funciones recursivas (y las condiciones de salida no se alcanzan), y otro el empleo de variables locales que ocupen mucha memoria (por ejemplo, arrays muy grandes), o una combinación de ambas. El stack (que crece "hacia abajo") puede "chocar" con el heap (que crece "hacia arriba"). El resultado suele ser el cuelgue de la aplicación o, aún peor, el cuelgue del sistema completo (alguna vez he tenido que quitar el cable de corriente porque no respondía ni al botón de
apagado).

Espero que todo este rollo conteste a tu pregunta. Saludos,
  #5 (permalink)  
Antiguo 18/08/2010, 11:35
 
Fecha de Ingreso: febrero-2007
Mensajes: 163
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Entendiendo alojamiento de memoria - C++

Mariano: localObject instanciado con el new se alojaria en el heap como toda memoria dinamica, porque es una operacion de new. Si estuviese declarada asi OtherClass localObject; sin el new entonces se alojaria en el stack.
Para liberar la memoria que alocas con new necesitas una operacion de delete sino tenes un memory leak.

Etiquetas: alojamiento, 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 11:29.