INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Speicherallozierung - 1D/2D/3D-Arrays



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

11.08.2009, 11:14 (Dieser Beitrag wurde zuletzt bearbeitet: 11.08.2009 11:28 von rolfk.)
Beitrag #10

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
Speicherallozierung - 1D/2D/3D-Arrays
' schrieb:Irgendwo habe ich gelesen, dass LV Speicher nur am Stück allokieren kann. Wie LV darin den Speicher verwaltet weiß ich glaube dir, dass die von dir genannte Methode besser klappt. Eigentlich auch logische, denn die Array innerhalb der Clusterelemente können unterschiedlich groß sein. LV kann somit keinen aneinanderhängenden Speicher belegen sondern setzt nur einen Pointer auf das Array rein. Wie LV dann vorgeht, um dieses Array zu speichern, weiß ich nicht. Es kann allerdings nicht irgendwo im Speicher liegen, da LV wie gesagt nur einen Bereich verwalten kann.

Das war Windows 3.1.

Seit Windows wirklich 32 Bit ist bekommt eine Applikation grundsätzlich einen 2GB (3GB mit speziellem boot.ini Eintrag, aber es ist keine gute Idee diesen Switch grundsätzlich zu verwenden, da er denn Speicher für den Kernel auf 1GB begrenzt und damit den Kernel ziemlich stark einschränkt) virtuellen Adressbereich zugewiesen.

Ob der auch alloziert werden kann hängt natürlich vom wirklich vorhandenen Speicher ab. LabVIEW fragt jeden Speicher ganz einfach beim OS an, und ja ein einzelnes Array muss ganz in einem einzigen aneinanderliegenden Block abgespeichert werden. Windows wählt irgendeinen Block im Speicherraum der gross genug ist und gibt diesen zurück. Die virtuelle Speicherverwaltung von x86 Prozessoren hat aber ihre Beschränkungen und kann nicht beliebig viele einzelne Speicherblöcke im virtuellen Speicherraum verwalten, da jeder Block auch wieder entsprechende Verwaltungsresourcen erfordert. Irgenwann mal gibt es entweder nicht mehr genug Speicherdeskriptoren für solche Blöcke oder aber der Speicher wurde inzwischen so fragmentiert dass Windows nicht mehr einfach einen genügendgrossen aneinanderhängenden Speicherblock allozieren kann. Beides resultiert in einem Out of Memory error.

LabVIEW könnte versuchen einen eigenen Memory Manger zu verwenden so wie es das in Windows 3.1 tat und wäre damit vielleicht im Stande in gewissen Grenzfällen eine bessere Verwendung der 2GB zu machen aber das käme mit extra Kosten da es auch wieder Speicher benötigte um die Speicherblöcke selber zu verwalten, was sowohl vom Speicher abginge als extra Laufzeit fragen würde. Windows kann das mindestens so schnell resp. dank der direkten Verwendung der x86 MMU Hardware sogar schneller aber ist nicht unbedingt optimalisiert für Applikationen die eventuel riesige kontinuierliche Speicherblöcke anlegen möchten.

Rolf Kalbermatter

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Nachrichten in diesem Thema
Speicherallozierung - 1D/2D/3D-Arrays - rolfk - 11.08.2009 11:14

Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Auswahl eines Arrays anhand des Wertes eines zweiten Arrays treffen alan 2 4.591 19.02.2015 16:12
Letzter Beitrag: alan
Bug Arrays... immer wieder Arrays nurso 6 7.507 15.08.2014 10:39
Letzter Beitrag: Lucki
  Array of Cluster(Arrays) nach Cluster(Concatenate Arrays) rasta 7 9.774 18.12.2008 12:33
Letzter Beitrag: rasta

Gehe zu: