vielen Dank für die Hilfe!
Es war doch die Speicher-Allocation Funktion; diese hatte ich ein wenig verschlimbessert zwischendurch. Ich habe ein paar Wrapper und Statistik-Prozeduren hinzufefügt, und Müll beiseite geschafft - bis ich den Fehler weggeputzt hatte. Letztendlich lag es vor Allem am Zusammenspiel mit ReAllocateMemory. Mir war eingefallen, daß Lua niemals 1 byte anfordern wird (mein Windows erlaubt nur minimal 2 Bytes zu alloziieren),doch wohl eher 0 oder 2, wegen des c structure paddings (denke ich jedenfalls), und daher lange Rede kurzer Sinn... Jetzt sieht sie so aus:
Code: Alles auswählen
ProcedureC.i __allocHandler(*ud, *ptr, osize, nsize)
Protected res
If nsize = 0 And *ptr ; free memory
FreeMemory(*ptr);
res = #Null
_MRemove(osize,#True) ; statistik
ElseIf nsize<=0 ; do nothing
res = #Null
Else ; malloc /realloc
If *ptr=#Null
res = AllocateMemory(nsize) ; malloc
_MAdd(nsize,#True) ; statistik
Else ; realloc:
;
If osize=nsize ; no change
res=*ptr
Else
res=ReAllocateMemory(*ptr, nsize)
If nsize>osize
_MAdd(nsize-osize,#False) ; statistik
Else
_MRemove(osize-nsize,#False) ; statistik
EndIf
EndIf
EndIf
EndIf
ProcedureReturn res ; return to Lua
EndProcedure
Der Speicherverbauch steigt nicht mehr, bleibt bei ca 30MB stecken, auch beim virtuellen. Wenn man minimiert fällt er wieder auf 1.5 MB Speicherauslastung, virtueller bleibt aber konstant. Danach bleibt alles ziemlich konstant und im Leerlauf, bzw. nach Anlauf absolut Stabil!