Struktur - Speicher freigeben
-
Hi Leute,
ich hab da ein problem. ich definiere eine Struktur ähnlich wie diese in einer ANSI-C-DLL.
typedef struct teststruktur { unsigned char length[1200][2]; unsigned char rnd_1[1200][65]; unsigned char rnd_2[1200][65]; unsigned char code[1200][16]; unsigned char rnd_3[1200][65]; }; struct teststruktur * my_testfile;
Das Problem nun ist das ich diese dll innerhalb einer JAVA-VM starte d.h. ich habe nur eine bistimmte Anzahl an Speicher zur Verfügung (So viel wie ich von der JAVA-VM bekomme). Dieses Problem habe ich gelöst in dem ich die Stacksize der VM vergrößert habe.
Aber der Speicher der structur wird nicht wieder freigeben. d.h. jedesmal wenn ich die funktion der dll aufrufe allociert er die structur neu...was nach einiger Zeit zu großen perfomrance problemen führen kann.
jetzt meine frage, kann ich den speicher der structur wieder freigeben??? sowas ähnlihces wie free() oder geht es sogar mit free()???
ich hoffe die fehlerbeschreibung ist verständlich
danke schonmal im voraus.
-
Du hast dort nur einen Pointer auf die struct in deinem Codesegment - den mußt du noch auf den richtigen Speicherbereich zeigen lassen:
struct test* my_test; ... my_test = malloc(sizeof(struct test)); for(i=0;i<1200;++i) { my_test->length[i][0]=1; ... } ... free(my_test); ...
(wenn du die struct auf dem Stack anlegst ("struct test my_test;"), wird sie automatisch am Ende der Funktion entsorgt, statische Variablen werden einmal angelegt und bei Programmende aufgeräumt)
-
(wenn du die struct auf dem Stack anlegst ("struct test my_test;"), wird sie automatisch am Ende der Funktion entsorgt, statische Variablen werden einmal angelegt und bei Programmende aufgeräumt)
hmmm...die frag ist jetzt aber wann ist das programmende einer dll??? wird in einer dll nicht der speicher erst dann freigegeben, wenn die aufrufende instanz sich beendet??? und wenn das so stimmt dann bekomme ich ja nie die statischen variablen frei.
aber ich probire es jetzt erstmal mit deinem malloc und schau was passiert.
DANKE
-
Dieser Thread wurde von Moderator/in c.rackwitz aus dem Forum ANSI C in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Ich verstehe Dein problem nicht ganz...
Wenn Du bei jedem Aufruf Speicher allokierst ist es klar das Du immer mehr brauchst...