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?
DIM innerhlab einer Procedure
DIM innerhlab einer Procedure
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
Re: DIM innerhlab einer Procedure
@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
einen Blick auf die Speicherauslastung im Taskmanager herausfinden können

Grüße ... Kiffi
a²+b²=mc²
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.

@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()
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
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
}