' schrieb:Ich habe schon Probleme mehr als 250 Bilder mit einer Kamera der Auflösung 320x256 Pixel mit 3D-Arrays aufzunehmen (Speicherüberlauf). LV handled alles was über 1 Dimension hinaus geht einfach "schlecht". Im Prinzip weiß kaum jemand das er damit Speicher allokiert. LV macht es einem also leicht Speicher zu reserviren, aber lässt einem diesen nicht wieder einfach so freigeben. Ich arbeite also immer mit 1D Arrays in LV.
Vor allen Dingen wird der Speicher als hintereinanderliegender Speicher gebraucht, so dass auch schon mal "recht kleine" Felder nicht angelegt werden können. Wird das Array an ein SubVI überreicht, so wird der Speicher noch mal gebraucht um die Daten zu kopieren. Hierzu gibt es bei NI geeignete Dokumente die das beschreiben. Um längere Arrays im Speicher haben zu können (z. B. 600 Bilder mit 658 X 496 Bildpunkten) bedarf es ein paar Tricks. Ich habe dazu kein 3D Array angelegt sondern ein Array (mit 600 Frames) von einem Cluster mit einem 2D-Array (von 658 x 496 Bildpunkten). Jetzt legt LV die Bilddaten nicht mehr hintereinander weg in den Speicher, sondern reserviert für jedes einzelne Bild einen eigenen Block, die irgendwo im Speicher sein können. Zusätzlich ist das ganze Array in einer While-Schleife mit Shift-Register untergebracht und ich greife per Index nur noch auf einzelne Bilder zurück.
Beim Rücksprung aus einem SubVI kann man von LV eine Speicherfreigabe anfordern: Application control > Memory Control > Request Deallocation.vi