Os quería hacer está pregunta, aunque más bien la tengo en mente pensando en máquinas actuales, supongo que el funcionamiento es el mismo...
La pregunta es la siguiente... cuando se libera memoria en una máquina, supongo que lo que se hace es poner a 0 las celdas de la memoria, no?¿, pero me surge una duda, si yo declaro por ejemplo int variable = 0, estoy llenando 32 bits a 0(numero de bits depende la máquina y el compilador), pero en realidad es información es un número real, el 0 existe, pero el ordenador supongo que no la trata como memoria "vacía"
Entonces mi duda es, si yo colocará un chorrón de arrays a 0, estaría consumiendo memoria, pero realidad esa memoria es como memoria liberada, está a 0... pero en realidad es el número 0, por lo que consumo la memoria del PC
Supongo que el asunto o la diferencia entre liberar memoria y dejar a 0 la memoria tiene que ver con el puntero que indica que es una variable, pero entonces tiene que haber algún tipo de información en algún sitio, esto lo desconozco totalmente.
No sé si se entiende la pregunta, espero que sí, a ver si me aclaráis un poco está pequeña duda, más que nada por curiosidad.
Liberando memoria en un ordenador (pregunta técnica)
- mentalthink
- Amiga 2500
- Mensajes: 2840
- Registrado: 11 Abr 2010, 15:06
- Gracias dadas: 45 veces
- Gracias recibidas: 14 veces
- zup
- Amiga 2500
- Mensajes: 3012
- Registrado: 04 Sep 2009, 20:07
- Sistema Favorito: Spectrum 16Kb/48Kb
- primer_sistema: Spectrum 16Kb/48Kb
- consola_favorita: Nintendo DS/3DS
- Primera consola: Nintendo GameBoy
- Ubicación: Navarra
- Gracias dadas: 86 veces
- Gracias recibidas: 356 veces
- Contactar:
Re: Liberando memoria en un ordenador (pregunta técnica)
No necesariamente / ni de coña.
Cuando tu asignas memoria, se solicita al sistema operativo el uso de esa memoria; cuando la liberas, se la estás devolviendo.
Si tú simplemente la rellenas a ceros, no la estás devolviendo y seguirá marcada "en uso" hasta que tu programa finalice (se supone que entonces se limpia la memoria asignada al programa, pero no siempre se limpia todo).
Como nota relacionada, tampoco tienes garantizadas dos cosas (varía en función del sistema operativo o la runtime del lenguaje):
- La memoria que se te asigna no tiene por qué estar inicializada o rellena de ceros. En el caso de un objeto, el constructor es el que debe hacer este trabajo, en el caso de un array... pues tendrás que hacerlo manualmente.
- Cuando liberas memoria, tampoco tiene por qué rellenarse de ceros (aunque algunos sistemas lo hagan). Es un problema de seguridad, ya que otro proceso podría asignarse y leer esa memoria, con lo que podrían extraer datos como números de cuenta y esas cosas.
Regla de oro: por cada puntero que asignes, debe haber otra instrucción para liberarlo.
Y si manejas datos sensibles, borra la memoria antes de liberarla.
Cuando tu asignas memoria, se solicita al sistema operativo el uso de esa memoria; cuando la liberas, se la estás devolviendo.
Si tú simplemente la rellenas a ceros, no la estás devolviendo y seguirá marcada "en uso" hasta que tu programa finalice (se supone que entonces se limpia la memoria asignada al programa, pero no siempre se limpia todo).
Como nota relacionada, tampoco tienes garantizadas dos cosas (varía en función del sistema operativo o la runtime del lenguaje):
- La memoria que se te asigna no tiene por qué estar inicializada o rellena de ceros. En el caso de un objeto, el constructor es el que debe hacer este trabajo, en el caso de un array... pues tendrás que hacerlo manualmente.
- Cuando liberas memoria, tampoco tiene por qué rellenarse de ceros (aunque algunos sistemas lo hagan). Es un problema de seguridad, ya que otro proceso podría asignarse y leer esa memoria, con lo que podrían extraer datos como números de cuenta y esas cosas.
Regla de oro: por cada puntero que asignes, debe haber otra instrucción para liberarlo.
Y si manejas datos sensibles, borra la memoria antes de liberarla.
I have traveled across the universe and through the years to find Her. Sometimes going all the way is just a start.
Además vendo cosas!
Además vendo cosas!
- mentalthink
- Amiga 2500
- Mensajes: 2840
- Registrado: 11 Abr 2010, 15:06
- Gracias dadas: 45 veces
- Gracias recibidas: 14 veces
Re: Liberando memoria en un ordenador (pregunta técnica)
Gracias zup, entonces a ver si lo he entendido.
Cuando yo digo por ejemplo (me invento los numeros , OK?¿), coge 100 Kb, entonces digamos que pongo esos 100Kb con una etiqueta, y escribo lo que sea structs, variables... etc, y cuando la libero, digamos que quito esa etiqueta, y aunque no esté a 0 puedo reescribirla, porque el ordenador o el sistema piensa que ya no es necesaria, porque he eliminado esa "etiqueta". Algo así no.
O sea asignar o liberar memoria no es poner en sí datos, es guardar localizaciones especificas para una tarea, y luego quede lo que quede el sistema sabe si puede usar esa parte que ha quedado con basura no?¿.
Por resumir que liberar memoria no es ponerlas a 0, si no dejar que otro proceso pueda escribir en esa parte.
Cuando yo digo por ejemplo (me invento los numeros , OK?¿), coge 100 Kb, entonces digamos que pongo esos 100Kb con una etiqueta, y escribo lo que sea structs, variables... etc, y cuando la libero, digamos que quito esa etiqueta, y aunque no esté a 0 puedo reescribirla, porque el ordenador o el sistema piensa que ya no es necesaria, porque he eliminado esa "etiqueta". Algo así no.
O sea asignar o liberar memoria no es poner en sí datos, es guardar localizaciones especificas para una tarea, y luego quede lo que quede el sistema sabe si puede usar esa parte que ha quedado con basura no?¿.
Por resumir que liberar memoria no es ponerlas a 0, si no dejar que otro proceso pueda escribir en esa parte.
- Namek
- Atari 1040 STf
- Mensajes: 840
- Registrado: 11 Jul 2011, 13:13
- Gracias dadas: 18 veces
- Gracias recibidas: 63 veces
Re: Liberando memoria en un ordenador (pregunta técnica)
mentalthink escribió:O sea asignar o liberar memoria no es poner en sí datos, es guardar localizaciones especificas para una tarea, y luego quede lo que quede el sistema sabe si puede usar esa parte que ha quedado con basura no?¿.
Por resumir que liberar memoria no es ponerlas a 0, si no dejar que otro proceso pueda escribir en esa parte.
Ezacstamente, asignar o reservar memoria es simplemente eso, pedir al sistema un trozo de memoria sin importar que hay ahí y liberar memoria es decir al sistema que ese trozo de memoria ya no se necesita y que se puede asignar para otra cosa. Asin de fácil.

- na_th_an
- Amiga 1200
- Mensajes: 1273
- Registrado: 10 Oct 2012, 11:17
- Sistema Favorito: (Otro)
- primer_sistema: Spectrum +2
- consola_favorita: Sony PlayStation 1
- Primera consola: Sega Master System
- Gracias dadas: 18 veces
- Gracias recibidas: 15 veces
Re: Liberando memoria en un ordenador (pregunta técnica)
Porque, además, memoria a "0" no es memoria vacía. Un 0 es un dato como cualquier otro.
De hecho, físicamente, el concepto "memoria vacía" no tiene sentido. Sólo adquiere sentido en un grado de abstracción mayor, en el que hay un "ente superior" (que puede ser el sistema operativo, o el propio programador en el caso de máquinas más antiguas, como puede ser un ordenador de 8 bits) que lleva un registro de qué zonas están "ocupadas". Este registro es externo, no es una cualidad digamos "física" de la memoria.
Piensa en un hotel. No te puedes meter en la primera habitación que veas que no hay nadie, porque eso no significa que esté libre. Hay un registro de habitaciones en el que se reserva una habitación, y esta habitación no la puede utilizar nadie más hasta que se libere.
De hecho, físicamente, el concepto "memoria vacía" no tiene sentido. Sólo adquiere sentido en un grado de abstracción mayor, en el que hay un "ente superior" (que puede ser el sistema operativo, o el propio programador en el caso de máquinas más antiguas, como puede ser un ordenador de 8 bits) que lleva un registro de qué zonas están "ocupadas". Este registro es externo, no es una cualidad digamos "física" de la memoria.
Piensa en un hotel. No te puedes meter en la primera habitación que veas que no hay nadie, porque eso no significa que esté libre. Hay un registro de habitaciones en el que se reserva una habitación, y esta habitación no la puede utilizar nadie más hasta que se libere.
- mentalthink
- Amiga 2500
- Mensajes: 2840
- Registrado: 11 Abr 2010, 15:06
- Gracias dadas: 45 veces
- Gracias recibidas: 14 veces
Re: Liberando memoria en un ordenador (pregunta técnica)
Gracias a todos, es lo que comentaba en el primer post na-th-an, yo recordaba o eso pensaba que dejar la memoria libre era ponerla a 0, pero claro el 0 es un número como cualquier otro, en binario es lo mismo que poner cualquier número, de ahí que me estaba armando un poco de follón.
Gracias a todos como siempre por las respuestas.
Gracias a todos como siempre por las respuestas.
¿Quién está conectado?
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 4 invitados