Looking at the code 'texturem.jpg' is loaded into a data pointer, and then loaded into video memory and the the data pointer is nulled, so there could be a jump of 100Mg
I'm seeing 130 MB in-game, and a 300 MB spike at load time, so that's a 150MB+ spike, at least room for 3 uncompressed versions... and wouldn't freeing the datapointer only release about 50 MB?

:idea: if the texture isn't loaded directly but passed to a mipmap generator (like GLU's, or driver's mipmap autogeneration), and that generator works on 32bpp images only and you pass it a 24bpp bitmap, that might explain things, as we would then see the following temporaries:
- 50 MB (4096x4096 @24bpp) bitmap loaded by the code
- 64 MB (4096x4096 @32bpp) mipmapper's work copy of the bitmap
- 30 MB mipmap temporaries
Total: approx 150 MB...