Seite 1 von 1
DIM innerhlab einer Procedure
Verfasst: 23.12.2007 13:27
von Kurzer
Hallo,
wenn ich Dim <Array> innerhalb eier Procedure aufrufe, wird der dafür reservuerte Speicher nach dem Verlassen der Procedure automatisch wieder freigegeben? Oder allokiert PB bei jedem Aufruf ein weiteres mal Speicher?
Verfasst: 23.12.2007 13:32
von edel
Wird beim verlassen wieder freigegeben.
Re: DIM innerhlab einer Procedure
Verfasst: 23.12.2007 14:05
von Kiffi
@Kurzer: Das hättest Du aber auch selber mit einem kleinen Testcode und
einen Blick auf die Speicherauslastung im Taskmanager herausfinden können
Grüße ... Kiffi
Verfasst: 23.12.2007 14:15
von Kurzer
Danke.
@Kiffi hast Recht:
Ich hatte erwartet, daß Windows eh hier und da Speicher allokiert und wieder freigibt wenn ich anfange zu kompilieren, aber die Speicheranzeige ist dann doch recht stabil geblieben, so daß ich den Effekt mittels Testcode sehen kann.
Zu meiner Entlastung anbei der Testcode.
Code: Alles auswählen
Procedure Test()
Dim Array.l(30000)
Delay (5000)
EndProcedure
; Vorher den Systemmonitor (Speicheranzeige) starten!
Test()
Verfasst: 23.12.2007 14:17
von edel
Richtig sieht man es ja hier :
Code: Alles auswählen
Procedure a()
Dim b(10)
ProcedureReturn 0
EndProcedure
Macro MP0{
_Procedure0:
PS0=12
XOr eax,eax
PUSH eax
PUSH eax
; Dim b(10)
PUSH dword 5
LEA edx,dword [esp+4]
PUSH edx
PUSH dword 0
MOV edx,dword [esp+12]
CALL SYS_FreeArray
MOV eax,11
PUSH dword 4
CALL SYS_AllocateArray
; ProcedureReturn 0
XOr eax,eax
JMP _EndProcedure1
; EndProcedure
XOr eax,eax
_EndProcedure1:
PUSH eax
MOV edx,dword [esp+4]
CALL SYS_FreeArray
POP eax
ADD esp,8
RET
}