2010-03-22 7 views
8

Estoy ejecutando un script que anima una trama (simulación de un flujo de agua). Después de un tiempo, elimino el ciclo haciendo ctrl-c. Después de hacer esto varias veces me sale el error:memoria no liberada en matlab?

??? Error: Out of memory. 

Y después comienzo a recibir ese error, cada llamada a mi guión generarlo.
Ahora, sucede antes de que se ejecute cualquier cosa dentro de la función que estoy llamando, es decir, incluso si agrego la línea a=1 como la primera línea de la función que estoy llamando, sigo recibiendo el error y no hay impresión, por lo que el código la función ni siquiera se ejecuta. ¿Qué podría estar causando esto?

+1

Proporcione un código y díganos qué intérprete de Matlab (incluida la versión) está utilizando. –

Respuesta

8

Existen varias razones posibles.

  1. Es muy probable que su secuencia de comandos cree algunas variables que están llenando la memoria. Ejecutar

    clear all 
    

    antes de reiniciar la secuencia de comandos, por lo que todas las variables se borran, o cambiar su secuencia de comandos para una función (lo que borrará automáticamente todas las variables temporales después de la función devuelve).

  2. Tal vez está animando trazando varias trazas una sobre otra (sin borrar primero los ejes). Por lo tanto, es posible que se quede sin espacio de almacenamiento dinámico de Java. Puede cerrar las figuras abiertas de forma individual, o ejecutar

    close all 
    

    También puede aumentar la cantidad de Java Memoria Matlab utiliza en su sistema (see instructions here) - en cuenta que el límite es generalmente bastante bajo, molesto por lo que si desea toneladas de figuras.

  3. Especialmente si está ejecutando una versión anterior de Windows, puede obtener su memoria fragmentada. Matlab necesita bloques contiguos de espacio libre para asignar variables. Para comprobar la fragmentación de la memoria, ejecute

    memory 
    

    y observe el número del tamaño variable máximo posible. Si esto es mucho más pequeño que el tamaño disponible para todas las matrices, es hora de reiniciar Matlab (supongo que si usa una versión de Windows que requeriría un reinicio para solucionar el problema, es posible que desee buscar una nueva computadora con Win7) .

+0

gracias! Mi problema fue exactamente # 2 – olamundo

+3

+1. Para el caso 3, no debería necesitar un reinicio. La fragmentación se produce en el espacio de memoria virtual asignado al proceso Matlab; reiniciar Matlab es suficiente para tener un borrón y cuenta nueva. –

+0

Gracias por la aclaración. Si recuerdo correctamente, en Windows NT (¿o era Win95?), Tuvimos que reiniciar por completo. ¡Me alegra que haya progreso en este mundo! – Jonas

2

Parece que no está borrando ninguna de sus variables. Debe proporcionar una forma de detener el bucle sin presionar ctrl-c (escriba una GUI simple con un botón "Detener" y su pantalla) y luego limpiar su espacio de trabajo en el script o borrar sus variables al inicio del script.

¿Está almacenando intencionalmente todos los datos (o algún componente grande) en cada iteración de su ciclo?

3

También puede probar el pack de comandos, por ejemplo:

close all; 
clear all; 
pack; 

para borrar la memoria. Aunque después de un reciente seminario de mathwork, le pregunté a uno de los gurús de mathworks y también afectó el comentario de @Andrew Janke con respecto a la fragmentación de la memoria. Por lo general, dejar de fumar y reiniciar Matlab me lo explica (en XP).

4

clear allclose all son formas sencillas de liberar memoria, que son conocidas por todos los no principiantes.

El problema principal es que cuando ha realizado algunos datos de procesamiento de datos de gran tamaño, y borró/cerró todo, todavía hay memoria significativa utilizada por matlab.

Este es actualmente un problema importante con matlab, y que yo sepa, no hay solución en lugar de reiniciar matlab, lo cual es una lástima.

Cuestiones relacionadas