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überlauf bei häufigen Aufruf einer dll



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!

04.03.2010, 17:26
Beitrag #1

maexx Offline
LVF-Neueinsteiger


Beiträge: 3
Registriert seit: Feb 2010

2010
2005
DE

13359
Deutschland
Speicherüberlauf bei häufigen Aufruf einer dll
Hallo,
ich verwende LV9 und habe mich mit Diffie-Hellman Schlüsselaustausch beschäftigt. Dazu habe ich erst das Ganze in LabVIEW gepackt und die langen Zahlen mit Binärarrays gerechnet. Das war sehr ineffizient. (300s pro Punktberechnung bei 224bit langen Zahlen). Da ich leider nicht viel Ahnung von C habe sind mir vorgefertigte Programme wie (Cyptopp oder OpenSSL) leider verschlossen geblieben.
Dazu habe ich selbst eine dll (Visual C++ 6) geschrieben die die langen Zahlen berechnet. Nachdem ich dann +;-;x;/, sowie y^x und die Punktinversion eingebunden hatte war ich schon bei 10s pro Punkt angekommen. Die Division wurde dan anstatt mit 8bit Arrayelementen in binär umgestellt und dann waren es nur noch 2,5s. Das ist schon brauchbar. Es ist allerding nun so, dass ich bei der Division und bei der Punktinversion Hilfsarrays (intern) brauche um zu rechnen.
Dazu verwende ich LabVIEW-Array-Handles. Als Problem hat sich nun herausgestellt das pro Slakarmultiplikation etwa 20MB Speicher belegt werden.
Dies geht dann so oft bis Windows sagt das der Speicher voll ist (ich glaube so bei 800MB). Ich habe schon einige Experimente unternommen das irgendwie hinzubekommen den Speicher nach Abschluß der Operation frei zu bekommen. Aber entweder LabVIEW stürtz ab oder die Berechnung wird falsch.
Ich hoffe bei diesem Problem kann mir von Euch jemand helfen. Denn ich weiß nicht mehr was ich am besten unternehmen kann....

Ich habe einen Teil der cpp-Datei drangehängt. Dort ist die Division drin.TD1Hdl Zahlenformat int und TD2Hdl Zahlenformat bool

Vielen DankSmile


Angehängte Datei(en)
Sonstige .txt  LZBerechnung.cpp.txt (Größe: 7,64 KB / Downloads: 290)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
05.03.2010, 08:35 (Dieser Beitrag wurde zuletzt bearbeitet: 05.03.2010 08:36 von rolfk.)
Beitrag #2

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
Speicherüberlauf bei häufigen Aufruf einer dll
Auu! Jemand der noch nicht so viel versteht von LabVIEW Datentypen und dann gleich in C damit loslegen will. Wink

Ich habe Deinen Code kurz überflogen und da gibt es einiges anzumerken was grässlich schief gehen kann.

Deine Fehlerbehandlung ist nicht ganz konsistent. Bei Zeile 76 - 83 setzt Du zwei Arrays auf eine andere Länge aber setzt den Längenindikator beider erst danach. Wenn die zweite Längenänderung fehlschlägt ist das erste Array in einem ungültigen Zustand wenn Dein Code zum LabVIEW Diagram zurückkehrt.

Und jetzt kommt Dein Memoryleak! Du legst zwar die b_MOD, b_tst und b_hilf Arrays auf dem Funktionsstack an, aber vergisst diese am Ende der Funktion wieder freizugeben. Mach also unter dem Ausgang: Label noch ein

if (var) DSDisposeHandle(var);

für alle drei Variablen.

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
07.03.2010, 15:52
Beitrag #3

maexx Offline
LVF-Neueinsteiger


Beiträge: 3
Registriert seit: Feb 2010

2010
2005
DE

13359
Deutschland
Speicherüberlauf bei häufigen Aufruf einer dll
Hallo Rolfk,

ich habe das mal so ausprobiert und jetzt funktioniert es. Der Speicher läuft nicht voll. Das ich etwas einfügen muss, um den reservierten Speicher wieder freizugeben, wusste ich schon. Einige Kommandos und Versuche hatte ich schon unternommen, allerdings ohne einen Erfolg.

Vielen Dank nochmals.

René
maexx
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
  Problem bei Aufruf einer dll swoc 5 3.313 08.09.2022 17:01
Letzter Beitrag: Martin.Henz
  bei Aufruf einer Funktion in shell32.dll schmiert LV manchmal ab toaran_ 3 5.143 21.01.2010 20:28
Letzter Beitrag: rolfk
  Problem Aufruf einer C-DLL mit Array Pointer hcl86 4 6.942 01.05.2009 10:18
Letzter Beitrag: hcl86

Gehe zu: