Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
chutullu
Anmeldungsdatum: 18.10.2005 Beiträge: 77
|
Verfasst am: 06.12.2009, 22:42 Titel: automatische Speicherfreigabe |
|
|
Hallo Forum,
mal eine Grundlagenfrage, weiß jemand ob der reservierte Speicher so ala
Code: |
test = allocate (sizeof(datentype) * matrix_y * matrix_x)
|
in Objekten, Prozeduren ect. nach Beendigung des gesamten Programmes automatisch wieder freigegeben wird ?
Oder sollte man lieber am Ende den vorher reservierten Speicher sicherheitshalber selbst wieder frei geben ?
Danke |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 07.12.2009, 00:16 Titel: |
|
|
Wird er nicht.
Code: |
Type MemDesc
Ptr As Any Ptr
Size As UInteger
End Type
Declare Function GetMemList () As MemDesc Ptr
Dim Shared As UInteger memalloc
Dim Shared As MemDesc memblocks(0 To 2^24)
Dim Shared As UInteger memblocksi
Function Allocate (count As UInteger) As Any Ptr
Dim As MemDesc md
md.Ptr = malloc(count)
md.Size = count
memblocks(memblocksi).Ptr = md.Ptr
memblocks(memblocksi).Size = md.Size
memalloc += md.Size
memblocksi += 1
Return md.Ptr
End Function
Function DeAllocate (mem As Any Ptr) As Integer
For n As UInteger = 0 To memblocksi
If memblocks(n).Ptr = mem Then
free(memblocks(n).Ptr)
memblocks(n).Ptr = 0
memblocks(n).Size = 0
memalloc -= memblocks(n).Size
memblocksi -= 1
Return TRUE
EndIf
Next
Return FALSE
End Function
Function CollectGarbarage () As Integer
For n As UInteger = 0 To memblocksi
free(memblocks(n).Ptr)
memblocks(n).Ptr = 0
memblocks(n).Size = 0
memalloc -= memblocks(n).Size
memblocksi -= 1
Return TRUE
Next
End Function
Function GetAllocMem () As UInteger
Return memalloc
End Function |
Musst nur noch ein paar Deklarationen und zwei #Undefs hinzufügen, schon sollte es laufen...
Der MM ist aber eher suboptimal (Array fester Größe mit ziemlichen Speicherverbrauch...) |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 07.12.2009, 00:46 Titel: |
|
|
Zitat: |
DIM SHARED AS MemDesc memblocks(0 TO 2^24)
|
nice, erstmal bis zu 128mb speicher mit ner schönen liste belegen, wenn man denn so viele handles braucht ... _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 07.12.2009, 16:01 Titel: |
|
|
Darauf habe ich ja hingewiesen... |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 07.12.2009, 16:51 Titel: |
|
|
Es ist aber nicht unbedingt fest. Zumindest nicht so, wie FB es scheinbar verwaltet (wenn man es nicht füllt, braucht das FB-Programm nur 500kb). _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 07.12.2009, 16:57 Titel: |
|
|
Keiner hat gesagt, dass der Compiler gar nicht optimiert.  |
|
Nach oben |
|
 |
chutullu
Anmeldungsdatum: 18.10.2005 Beiträge: 77
|
Verfasst am: 08.12.2009, 03:01 Titel: |
|
|
Ist allein deswegen schon eine interessante Frage weil ich ja sonst den Speicherbereich überlaufen könnte ...
Könnte ja jemand auf die Idee kommen api's zu überladen und bestimmten Systemcode mit korrumpierten Speicherbereichen zu überschreiben. (aber das ist ein anderes thema)
Eigentlich sollte ja Windows nach Beendigung eines speraten Programmthreades jeglichen Speicherbereiche wieder freigeben, so meine Logik. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 08.12.2009, 08:20 Titel: |
|
|
egal was du überlädst, irgendwo wird immer noch eine systemfunktion dahinter stecken, selbst wenn du jetzt all deine allocates plötzlich mit strings realisieren würdest. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 08.12.2009, 18:47 Titel: |
|
|
Muss es aber nicht.
Es hat einen Grund warum es free gibt. Und es wird auch ganz klar gesagt, dass DU das machen musst. Java macht es automatisch (GC), Windows ist nicht dazu verpflichted. "This behaviour could be altered in subsequent versions of Windows" (Oder so ähnlich) |
|
Nach oben |
|
 |
|