"At one end of the scale, Memcheck adds code to check every memory access and every value computed, making it run 10-50 times slower than natively."One of the memory intensive things with most games is loading images or textures. As the character selection screen loaded the same images multiple times, whenever I was trying to free memory around there, I had to wait approximately 5 seconds for the screen to load. If you choose "VS Mode" in any computer game, you expect it to load the character selection screen instantly; 5 seconds is a long time.
This prompted me to add a caching layer on top of my image loading. However, my coding skills at the time of writing the graphics component were not at a level that enabled me to produce extensible code. So, I spent a few months doing the following:
- Replacing SDL 1.2 with SDL 2.0 (SDL 2.0 was released)
- Rewriting the graphics component from scratch
- Updating existing code to use the rewritten graphics component
- Finding memory leaks, and fixing them (if possible*)
* some leaks were detected in SDL and system libraries, I did not fix these
I'm happy to say the final result of this is the following Valgrind report:
==4498==
==4498== HEAP SUMMARY:
==4498== in use at exit: 56,314 bytes in 469 blocks
==4498== total heap usage: 129,540 allocs, 129,071 frees, 519,910,160 bytes allocated
==4498==
==4498== LEAK SUMMARY:
==4498== definitely lost: 0 bytes in 0 blocks
==4498== indirectly lost: 0 bytes in 0 blocks
==4498== possibly lost: 0 bytes in 0 blocks
==4498== still reachable: 55,998 bytes in 460 blocks
==4498== suppressed: 316 bytes in 9 blocks
==4498== Reachable blocks (those to which a pointer was found) are not shown.
==4498== To see them, rerun with: --leak-check=full --show-leak-kinds=all
==4498==
==4498== For counts of detected and suppressed errors, rerun with: -v
==4498== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 12 from 6)
What's next:
- Launching a game instance with selected characters (including assigning an ai controller)
- Maps / backgrounds
- Interaction between characters