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. :allright:

@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
}