Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - NextByte

#21
Cita de: Loretz en  5 Marzo 2019, 06:04 AM
No, al volver de h() ya no está reservado.
No, ya no.
Sí, así es.
Sí, vuelve a estar disponible (es una porción de memoria en la stack, automática).
Puede tenerlos o no, después de volver de h() su valor es "indefinido" (quizá sí, quizá no), algunos compiladores le asignarán un cero, otros lo dejarán como está, en otros contendrá cualquier cosa al azar; para el lenguaje su valor es "indefinido".
Puede ser posible, pero depende del compilador y de la suerte que tengas ese día. Es lo que el estándar C++ califica como "Undefined Behavior" (comportamiento indefinido, si pretender leerlo o desreferenciarlo puede pasar cualquier cosa, normalmente mala).
Sí, es memoria disponible para el programa, ¿por qué no?

Desde tu punto de vista entonces a diferencia de "srWhiteSkull" hablas de que la pila de variables que el menciona como estatica tu haces referencia de que puede llegar a comportarse de manera dinamica de manera que cuando entra-sale de la funcion todos lo segmentos de memoria que componen a las variables declaradas en ella son regresadas a memoria disponible incluso cuando existe un puntero que tiene un ambito global y que hace referencia a un segmento de memoria que era parte de una variable de la cual su ambito o su tiempo de vida ya ha terminado. ¿Algo asi ?, o ¿estoy mal interpretando alguna de las dos respuestas?
#22
Cita de: srWhiteSkull en  5 Marzo 2019, 05:58 AM
Mira es fácil de entender, la pila del programa es un espacio estático, lo reserva el compilador, no se reserva en tiempo de ejecución. Mientras que cuando reservas memoria dinámica, con new, malloc o lo que sea, le pides al sistema dinamicamente que te reserve un espacio el cual es neceserio destruir.
Ohh... Ahora entiendo... Entonces cuando en los cursos basicos hablan sobre el tiempo de vida de una variable solo hacen referencia a la zona o area donde vas a poder acceder a una direccion de memoria a la cual hace referencia esa variable pero sin embargo cuando sale de ese tiempo de vida no es que exista una liberacion de memoria sino que simplemente ya no se puede acceder con el nombre de esa variable. Supongo entonces que el hecho de que se crearan los tiempos de vida fue por el hecho de intentar crear programas mas faciles de mantener y evitar todo global por que realmente no es que se este haciendo alguna optimizacion de memoria en el sentido de que se esta liberando memoria con las variables que sobrepasaron su tiempo de vida.
#23
Cita de: srWhiteSkull en  5 Marzo 2019, 05:15 AM
No, no se destruye y tampoco puedes reservar en ese espacio que se encuentra en la pila del programa. Las variables además no son punteros son una referencia a ese espacio que se reemplazan al compilar. Cuando compilas A ya no existe, solo en el codigo fuente.

Por otro lado cuando un espacio es liberado, trabajando con punteros, el espacio sigue manteniendo el contenido que tenía, no se rellena con ceros.
Cuando dices que "No, no se destruye y tampoco puedes reservar en ese espacio que se encuentra en la pila del programa. " haces referencia a que una vez que se termino el tiempo de vida de la variable aún se sigue preservando el espacio en la pila del programa debido a que el puntero hace referencia a esa zona de memoria ? . Comprendo que no se rellene con 0 una vez que se llega a liberar la memoria pero mi duda es como determina que segmentos de memoria deben regresarse al conjunto de memoria disponible . En el ejemplo anterior yo  pensaria  que tal vez en tiempo de compilacion la memoria a la que hacia referencia la variable 'a' va ser liberada o pasada al conjunto de memoria disponible cuando se termina el bloque de codigo donde fue declarada sin embargo en el caso de que un puntero global haya hecho referencia ese segmento de memoria antes... el compilador detecta que aunque el tiempo de vida de la referencia("variable a") ha terminado se tiene un puntero que apunta a ese segmento de memoria y por lo tanto ese segmento de memoria permanece en la pila del programa.
#24
Buenas a todos, teniendo en cuenta el siguiente programa:

Código (cpp) [Seleccionar]

#include <iostream>

using namespace std;
int *ptr;

void h(){
     int a = 333;
     ptr = &a;
     cout << "Direccion de memoria" << ptr << endl;
}


int main(){
 
     h();
     cout << *ptr << endl;
}


A través del programa anterior tengo un puntero global, este puntero lo hago que apunte a una variable y simplemente despues verifico que realmente si apunte a ella. Mi pregunta es... la variable 'a' que esta declarada en la función 'h' a la cual hago que apunte ptr dentro de la función tiene un tiempo de vida que se ve limitada por las llaves de la función, cuando yo regreso al main el tiempo de vida de la variable 'a' ha terminado sin embargo el espacio de memoria donde estaba contenido y que ahora es apuntado por el puntero ¿sigue estando reservado?, es decir, ¿ese espacio de memoria sigue siendo considerado como ocupado por una variable? o fue liberado al mismo tiempo que termino el tiempo de vida de la variable 'a'. Tengo la incertidumbre de si ese pedazo de memoria regreso al conjunto de la memoria disponible pero sin embargo sigue teniendo los valores que anteriormente fueron utilizados para representar a la variable 'a' y que pueda ser posible que por ahora el apuntador me siga mostrando ese valor pero sin embargo conforme vaya avanzando un programa y se reserve memoria etc... Ese segmento de memoria pueda llegar a ser sobrescrito por un nuevo valor de una variable .