Liberando memoria en un ordenador (pregunta técnica)

Foro dedicado a la programación en todo tipo de sistemas clásicos.
Avatar de Usuario
mentalthink
Amiga 2500
Amiga 2500
Mensajes: 2840
Registrado: 11 Abr 2010, 15:06
Gracias dadas: 45 veces
Gracias recibidas: 14 veces

Liberando memoria en un ordenador (pregunta técnica)

Mensajepor mentalthink » 24 Oct 2016, 19:40

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.

Avatar de Usuario
zup
Amiga 2500
Amiga 2500
Mensajes: 2967
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: 68 veces
Gracias recibidas: 322 veces
Contactar:

Re: Liberando memoria en un ordenador (pregunta técnica)

Mensajepor zup » 24 Oct 2016, 20:14

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.
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!

Avatar de Usuario
mentalthink
Amiga 2500
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)

Mensajepor mentalthink » 24 Oct 2016, 22:46

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.

Avatar de Usuario
Namek
Atari 1040 STf
Atari 1040 STf
Mensajes: 838
Registrado: 11 Jul 2011, 13:13
Gracias dadas: 18 veces
Gracias recibidas: 63 veces

Re: Liberando memoria en un ordenador (pregunta técnica)

Mensajepor Namek » 25 Oct 2016, 00:34

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. :mrgreen:

Avatar de Usuario
na_th_an
Amiga 1200
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)

Mensajepor na_th_an » 25 Oct 2016, 08:48

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.

Avatar de Usuario
mentalthink
Amiga 2500
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)

Mensajepor mentalthink » 25 Oct 2016, 12:23

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.


Volver a “Programación”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 20 invitados