[Scummvm-devel] memory footprint issues
Max Horn
max at quendi.de
Thu Mar 6 17:24:04 CET 2003
Am Freitag, 07.03.03 um 00:43 Uhr schrieb Marcus Comstedt:
>
> Ok, here are the preliminary results of my memory profiling.
>
> These are the 10 individual functions that had the largest memory
> footprint (maximum number of allocated bytes at any one time during
> the program execution) during my test run:
>
Were interesting results...
> 9000000 Sound::playBundleSound(char*)
Even without a leak, this allocates 1 MB temporary buffers to
decompress the sounds, even though typically less than 100 KB are
needed. There ought to be some way to figure out in advance how big the
buffer needs to be... ideally the game developers were clever enough to
store that information easily accessible somewhere.
In any case - that buffer should have been temporary - but it wasn't,
it was never freed. So each time a bundle sound plays (e.g. an actor
talks in The Dig / COMI), we leaked 1MB ! I fixed that in CVS.
> 6150000
> SoundMixer::ChannelStream::ChannelStream[in-charge](SoundMixer*,
> void*, unsigned long,
> unsigned, unsigned char, long, long)
It turns out that playStream() (which creates the ChannelStream
objects) is always called with a buffer_size of 2 MB (well 2 million
bytes). This seems to be to allow subsequent "append" calls... this is
very inefficient. We should replace this with a more flexible design,
if possible...
Max
More information about the Scummvm-devel
mailing list