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 

Speicher-Allokation vs. Konstante



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!

19.12.2016, 10:44 (Dieser Beitrag wurde zuletzt bearbeitet: 19.12.2016 11:49 von Trinitatis.)
Beitrag #1

Trinitatis Offline
LVF-Guru
*****


Beiträge: 1.694
Registriert seit: May 2008

7.1 / 8.0 /2014-1, 18
2002
DE

18055
Deutschland
Speicher-Allokation vs. Konstante
Hallo zusammen,

ich möchte von 4 verschiedenen Kameras Bilddaten einsammeln. Dadurch entstehen irgendwann 2D-U32-Arrays mit 1024*3000 Werten.
Hierbei möchte ich mit dem Speicher so effizient wie möglich umgehen. Also nehme ich mir ein "leeres" 2D-Array und beschreibe diese zeilenweise während der Daten-Akquise.

Meine Frage ist nun, ob es ratsam ist, das "Leer-Array" beim Aufruf des jeweiligen VIs jedesmal zu initialisieren und somit jedes Mal eine Speicheranforderung zu stellen, oder ob es effizienter sein könnte, dieses "Leer-Array" als Konstane ins VI zu legen, in der Erwartung, dass der nötige Speicher beim Laden der EXE einmal allokiert wird.


Gruß, Marko
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.12.2016, 12:51
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.411
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Speicher-Allokation vs. Konstante
Hallo Marko,

Zitat:Meine Frage ist nun, ob es ratsam ist, das "Leer-Array" beim Aufruf des jeweiligen VIs jedesmal zu initialisieren und somit jedes Mal eine Speicheranforderung zu stellen, oder ob es effizienter sein könnte, dieses "Leer-Array" als Konstane ins VI zu legen, in der Erwartung, dass der nötige Speicher beim Laden der EXE einmal allokiert wird.
Grundregel in LabVIEW: solange ein VI im Speicher bleibt (wie z.B. ein subVI), solange bleiben auch seine Speicheranforderungen aktiv!

Wenn du also einmalig mit InitArray einen Speicherbereich abfragst, dann wird der Memorymanager diesen Speicherbereich auch beim erneuten VI-Aufruf weiterverwenden (solange es aufgrund des nicht einsehbaren internen Speichermanagements von LabVIEW möglich ist)…

Zitat:Also nehme ich mir ein "leeres" 2D-Array und beschreibe diese zeilenweise während der Daten-Akquise.
Wieso erstellst du ein leeres Array?
Warum erstellst du nicht gleich ein Array in der erforderlichen Größe und ersetzt dessen Elemente durch deine Daten?

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.12.2016, 13:17
Beitrag #3

Trinitatis Offline
LVF-Guru
*****


Beiträge: 1.694
Registriert seit: May 2008

7.1 / 8.0 /2014-1, 18
2002
DE

18055
Deutschland
RE: Speicher-Allokation vs. Konstante
(19.12.2016 12:51 )GerdW schrieb:  Wieso erstellst du ein leeres Array?
Warum erstellst du nicht gleich ein Array in der erforderlichen Größe und ersetzt dessen Elemente durch deine Daten?

Hallo Gerd,

Danke für deine Ausführungen.
Mit dem "leeren" Array meinte ich natürlich ein Array in der erforderlichen Größe, deren Zeilen ich dann überschreibe - deshalb die Anführungszeichen.

Die Frage war für mich nur, ob ich dieses vorinitialisierte Array mit Initialize Array erzeuge, oder ob es performanter wäre, eine Konstante ins BD zu legen.
Aber wenn die Speicheranforderung nur einmal beim 1. VI-Aufruf erfolgt, dann kann ich es wohl damit machen und bin flexibler, was die Arraygröße angeht.


Gruß, Marko
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.12.2016, 14:24
Beitrag #4

GerdW Offline
______________
LVF-Team

Beiträge: 17.411
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Speicher-Allokation vs. Konstante
Hallo Marko,

Zitat:ie Frage war für mich nur, ob ich dieses vorinitialisierte Array mit Initialize Array erzeuge, oder ob es performanter wäre, eine Konstante ins BD zu legen.
Der LabVIEW-Compiler ist relaitv intelligent, wenn es um "constant folding" geht: "konstante" Strukturen werden beim Kompilieren schon "ausgerechnet" und im Executable durch Konstanten ersetzt. (Einfach mal dazu lesen.)
Wenn du also ein InitArray mit Konstanten an den Eingängen aufrufst, wird der Compiler daraus (wahrscheinlich) eine Arraykonstante machen…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Ausgelesener Wert als konstante in SubVi mikadm 12 5.618 02.09.2020 10:27
Letzter Beitrag: mikadm
  Negative Werte - Zeitstempel Konstante im XML-String BlackEagle 2 5.126 18.12.2019 15:30
Letzter Beitrag: BlackEagle
  Objektname einer Enum Konstante ändern mprocket 7 5.727 30.01.2018 12:23
Letzter Beitrag: mprocket
  Element in Array-Konstante löschen mez15 3 5.093 08.08.2013 12:16
Letzter Beitrag: Y-P
  Konstante Schaltflächengröße Tapio 8 6.734 01.08.2012 10:27
Letzter Beitrag: THL
  queue per Konstante/Bedienelement anfordern phylin 4 5.679 11.01.2012 20:03
Letzter Beitrag: phylin

Gehe zu: