About memory freeing ?

BlitzMax Forums/BlitzMax Programming/About memory freeing ?

Filax(Posted 2005) [#1]
Hi :)

I have try to compress a bank :) the code work but i don't
understand why my memory is not free after process ? the output
window return

Executing:Zip Engine.exe
MEM USED 1 : 15917 / 16656
MEM USED 2 : 1447823 / 1448195
MEM USED 3 : 90692 / 95558
Process complete

Theoretically the test number 3 should be the same one as the
test number 1 because i released my RAM? or i'm idiot ?

This is the code used for my test :




seyhajin(Posted 2005) [#2]
Building test
Compiling:test.bmx
flat assembler version 1.51
3 passes, 3877 bytes.
Linking:test.exe
Executing:test.exe
MEM USED 1 : 15897 / 16656
MEM USED 2 : 952484 / 952927
MEM USED 3 : 29097 / 29887

Process complete


FlameDuck(Posted 2005) [#3]
I don't understand why my memory is not free after process ?
Because you aren't dereferenceing your banks, ie they still exsist as valid objects, and so aren't being garbagecollected.

Try this code instead:
Import Pub.ZLib

FlushMem
Print "MEM USED 1 : "+MemAlloced()+" / "+MemUsage()

Local MySourceBank:TBank=TBank.load("C:\Dev\42ninjas\bin\logo.png") 

Print "MEM USED 2 : "+MemAlloced()+" / "+MemUsage()

Local MyOutBank:TBank=CompressBank(MySourceBank)
MyOutBank.Save("C:\Dev\logo.bin") 

MyOutBank = Null
MySourceBank = Null

FlushMem

Print "MEM USED 3 : "+MemAlloced()+" / "+MemUsage()

End
Oh and I leave you with this quote from the manual:
Function MemFree( mem:Byte Ptr,size ) Free allocated memory.

The memory specified by mem must have been previously allocated by MemAlloc or MemExtend.



Filax(Posted 2005) [#4]
Ok ok !! many thanks FlameDuck !