"Initialize Array" allokiert Speicher 4-fach (Labview 2009 Win XP 32Bit) - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +--- Thema: "Initialize Array" allokiert Speicher 4-fach (Labview 2009 Win XP 32Bit) (/Thread-Initialize-Array-allokiert-Speicher-4-fach-Labview-2009-Win-XP-32Bit) |
"Initialize Array" allokiert Speicher 4-fach (Labview 2009 Win XP 32Bit) - tinger - 05.03.2012 16:34 Hallo zusammen, wir haben ein sehr seltsames Problem (ich würde fast sagen einen Bug). Vorgeschichte zum Kontext, spielt für das Problem eigentlich keine Rolle: Wir möchten aus einer A/D Karte möglichst den kompletten Puffer (256MB) in ein Array schreiben. Dafür wird dieses mit 128*10^6 16Bit Integern mit der Funktion "Initialize Array" initialisiert (16Bit Integer kommen auch aus der Karte). Einen zusammenhängenden Speicherbereich für 256MB haben wir, aber keine 4... Problem: Betriebssytem: Windows XP 32 Bit Labview-Version: 2009 32 Bit Labview allokiert den Speicher für das Array leider 4 mal und gibt diesen auch nach dem ausführen des Programms nur 1 mal wieder frei. Da das in dem eigentlich verwendeten Programm sehr unübersichtlich ist, haben wir versucht das ganze in klein nachzustellen (dazu das hochgeladene mini-VI). Auch hier wird der Speicher 4 mal belegt und nur ein mal wieder freigegeben. Den Speicher überwacht haben wir mit VMMap (http://vmmap.softonic.de/), man sieht es aber auch im Taskmanager. Ist das ein bekanntes Problem? Gibts dafür einen Patch oder Workaround? Wir haben danach gesucht aber nichts gefunden. Bin dankbar für jede Hilfe und hoffe ich hab mich an alle Regeln gehalten ! Christian RE: "Initialize Array" allokiert Speicher 4-fach (Labview 2009 Win XP 32Bit) - jg - 05.03.2012 17:08 So große Arrays nach Möglichkeit NICHT als Indikator auf dem FP anzeigen. FP-Controls sind üblicherweise immer eine Speicherkopie. Damit wären wir schon bei 2 Speicherallozierungen. Über die anderen beiden kann ich nur spekulieren, vielleicht irgendwelche "Rückgängig"-Operationen in der Entwicklungsumgebung. Hier ein VI ohne FP-Element, bei dem der Speicher nur 1x alloziert wird. [attachment=38949] Gruß, Jens RE: "Initialize Array" allokiert Speicher 4-fach (Labview 2009 Win XP 32Bit) - tinger - 05.03.2012 17:43 Danke schon mal für Deine Antwort, ich schau mir dein Beispiel gleich an. Davor noch schnell eine Frage: mit (05.03.2012 17:08 )jg schrieb: [...]meinst du schon, das die zusätzlichen 2 bei Dir auch auftreten oder ist das ein Problem von "unserem" Labview? RE: "Initialize Array" allokiert Speicher 4-fach (Labview 2009 Win XP 32Bit) - jg - 05.03.2012 17:47 Innerhalb der LV-Umgebung sind sie bei deinem Bsp aufgetreten. Interessant zu testen wäre, ob das auch innerhalb eine Exe passiert? Gruß, Jens RE: "Initialize Array" allokiert Speicher 4-fach (Labview 2009 Win XP 32Bit) - tinger - 06.03.2012 01:40 Danke nochmal, wir sind hier schon ein gutes Stück weiter gekommen. Den "Indicator" konnten wir nur umgehen, indem wir ein Sub-VI aufgelöst und ins Toplevel-VI eingefügt haben. "Probes" scheinen ebenso wie "Indicator" eine Kopie zu erzeugen (aus meiner Sicht nicht gerade sinnvoll). Außerdem haben wir mit einem "Reshape" wohl noch eine Kopie erzeugt (ist denke ich in anderen Programmiersprachen auch anders). Damit können wir eigentlich schon leben. Hab noch nie aus Labview eine exe erstellt, schau ich mir evtl. in den nächsten Tagen mal an. Grüße Christian RE: "Initialize Array" allokiert Speicher 4-fach (Labview 2009 Win XP 32Bit) - GerdW - 06.03.2012 08:25 Hallo tinger, Zitat:Den "Indicator" konnten wir nur umgehen, indem wir ein Sub-VI aufgelöst und ins Toplevel-VI eingefügt haben.Wenn ihr das subVI auf Priorität "Unterprogramm" setzt, benutzt das subVI den "Speicherkontext" des aufrufenden VI und legt keine zusätzlichen Kopien für Indicator (wie sonst üblich) an. Zitat:"Probes" scheinen ebenso wie "Indicator" eine Kopie zu erzeugen (aus meiner Sicht nicht gerade sinnvoll).Probes sind auch nur Indicators (quasi)... Zitat:Außerdem haben wir mit einem "Reshape" wohl noch eine Kopie erzeugtDas ist üblicherweise nicht so, aber der LV-Memorymanager wird schon wissen, warum. Hier vielleicht: Ihr gebt sowohl das Ursprungsarray als auch das "reshaped" Array über einen ConnectorPane-Anschluß weiter. Also muss für beide Arrays ein eigener Speicherbereich vorgehalten werden... RE: "Initialize Array" allokiert Speicher 4-fach (Labview 2009 Win XP 32Bit) - tinger - 06.03.2012 11:44 Hallo zusammen, Danke nochmal für Eure Hinweise! Das mit dem Sub-VI ist für die Zukunft interessant (in dem Projekt störts uns so jetzt auch nicht und bleibt deshalb so ). Den "Reshape" haben wir auch rausgenommen. Damit lief das Programm fast mit dem kompletten Kartenpuffer, also schon annehmbar für uns. Dann haben wir das Projekt doch in eine exe gepackt und seit dem funktioniert es komplett! Danke! Christian ich zitiere mal die beiden Lösungen um sie gemeinsam als Lösung zu markieren: (05.03.2012 17:08 )jg schrieb: So große Arrays nach Möglichkeit NICHT als Indikator auf dem FP anzeigen. FP-Controls sind üblicherweise immer eine Speicherkopie. Damit wären wir schon bei 2 Speicherallozierungen. (05.03.2012 17:47 )jg schrieb: Innerhalb der LV-Umgebung sind sie bei deinem Bsp aufgetreten. Interessant zu testen wäre, ob das auch innerhalb eine Exe passiert? |