|
|
|
Memory-Management von C++-Objekten in Mex-Files |
|
| Bubble |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 02.09.2011, 09:53
Titel: Memory-Management von C++-Objekten in Mex-Files
|
 |
| |
 |
|
Hio,
Ich hab mal eine Frage zum Speichermanagement von Mex-Files:
Ich habe ein Mex-File geschrieben, was einige Funktionen in C++ aufruft und dabei auch Objekte instanziiert. Diese Objekte bleiben für weitere Berechnungen bestehen und deren Pointer werden an Matlab zurückgeben, damit man sie halt wiederfindet. Je nach Programmstatus müssen andere Berechnungen durchgeführt werden und da jedes Mex-File in einem eigenen Kontext läuft und somit der Pointer ungültig werden würde, gibt es nur ein Mex-File was mit einem "action"-Parameter die gewünschte Berechnung ausführt, anstelle von mehreren Parametern pro Berechnung.
Nun ist das Matlab-Skript, was das Mex-File aufruft, irgendwann mit der Berechnung durch und soweit ich die Doku verstanden habe, wird der Speicher des C++-Objektes nicht mehr automatisch aufgeräumt. Anders geht es ja auch gar nicht, es soll ja gerade persistent gegenüber Matlab sein.
Das heißt, ich muss aufräumen. Nun steht in der Matlab-Doku, ich soll das in folgender Funktion machen: "mexAtExit" (siehe: http://www.mathworks.de/help/techdoc/apiref/mexatexit.html)
In der Doku heißt es dazu: "Register function to call when MEX-function cleared or MATLAB software terminates"
Wenn ich das richtig verstehe, dann wird diese Funktion immer dann aufgerufen, wenn mexFunction(..) beendet wird. Zu diesem Zeitpunkt möchte ich aber eventull noch gar nicht meine Objekte lösche, weil ich damit noch etwas berechnen muss.
Heißt das wiederum, dass ich am Ende meiner Berechnung in Matlab irgendwann das Mex-File nocheinmal aufrufen muss und per "action"-parameter den Befehl zum aufräumen geben muss? Das heißt dann auch wieder, wenn die Berechnung mal abbricht (weil Fehler oder sonst was), mein Speicher nicht mehr aufgeräumt wird, oder?
Gruß
Bubble
|
|
|
|
|
|
| Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 08.09.2011, 13:01
Titel: Re: Memory-Management von C++-Objekten in Mex-Files
|
 |
Hallo Bubble,
Die Mex-Funktion mexAtExit wird aufgerufen, wenn das Mex-File aus dem Speicher gelöscht wird, wie im Hilfetext beschrieben:
| Zitat: |
| Register function to call when MEX-function cleared or MATLAB software terminates |
Dies geschieht bei "clear <MexFileName>" (wenn kein mexLock verwendet wurde) oder wenn Matlab beendet wird.
Eine saubere Methode wäre also auf jeden Fall eine "action", bei der die Variablen explizit gelöscht werden.
Gruß, Jan
|
|
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|