LoadImage and LoadSound consume memory that...

BlitzMax Forums/BlitzMax Programming/LoadImage and LoadSound consume memory that...

Grey Alien(Posted 2007) [#1]
can't be freed with GC Collect. It seems to be the same basic amount (536 bytes) no matter how many images you load or if you load sounds AND images.

See this code:

DisplayMem("Start")
test()
DisplayMem("End")

Function Test()
	'try commenting these out
	Local i:TImage = LoadImage("logo.png")
	Local j:TImage = LoadImage("logo.png")
	Local s:TSound = LoadSound("testsound.wav")
End Function

Function DisplayMem(label$="")
	GCCollect()
	Print GCMemAlloced() + "  " + label
End Function


If you load nothing, start and end are the same. If you load something (or everything) doesn't matter what, the end value is higher than the start value. Must be some BMax filehandling code that creates some globals that aren't freed up.

Worth bearing in mind if you are writing apps to test
freeing memory (like I am).

***BIG FAT EDIT***
Only occurs in Debug mode.


tonyg(Posted 2007) [#2]
It produces the same value on my system.
<edit>
11196 Start
11196 End


ziggy(Posted 2007) [#3]
Does it produce the same results when using the GCCollect outside the DisplayMem function? (I can't give it a try now) but it used to be different when flushmem was needed in earlier versons of BlitzMax


Grey Alien(Posted 2007) [#4]
yep this produces the same value. If you comment out the loading lines, it returns to the start value.

GCCollect()
Print GCMemAlloced()
test()
GCCollect()
Print GCMemAlloced()

Function Test()
	'try commenting these out
	Local i:TImage = LoadImage("logo.png")
	Local j:TImage = LoadImage("logo.png")
	Local s:TSound = LoadSound("testsound.wav")
End Function



Oddball(Posted 2007) [#5]
I get:
Debug Mode:
12316  Start
12316  End

Release Mode:
11500  Start
11500  End
So it works fine here.


tonyg(Posted 2007) [#6]
All examples produce the same 'start' and 'end' values on my system.
<edit>
11196 Start
11196 End


Grey Alien(Posted 2007) [#7]
feck. sorry everyone false alarm. Debug Mode produces the 536 byte difference (why I've no idea?) and Release mode is fine. Well that too is worth knowing I suppose. Run all memory tests with debug off.