Allocate imgbuf on-demand in Picture_PatchConvert

This static var requires a 64 megabyte .bss section value which
is allocated on application startup. Depending on the particulars of the
operating system's virtual memory implementation, this may result in
dynamic page allocation for the span, or a full upfront allocation.
Either way, it doesn't need to be like this, we can just dynamically
allocate the buffer instead.

This may save up to 64MiB of runtime memory usage.
This commit is contained in:
Eidolon 2024-12-13 10:55:22 -06:00
parent 6ffdeb6c44
commit 1ee5547bb2

View file

@ -52,8 +52,6 @@
#endif
#endif
static unsigned char imgbuf[1<<26];
#ifdef PICTURE_PNG_USELOOKUP
static colorlookup_t png_colorlookup;
#endif
@ -119,6 +117,7 @@ void *Picture_PatchConvert(
{
INT16 x, y;
UINT8 *img;
UINT8 *imgbuf = Z_Malloc(1<<26, PU_STATIC, NULL);
UINT8 *imgptr = imgbuf;
UINT8 *colpointers, *startofspan;
size_t size = 0;
@ -352,6 +351,7 @@ void *Picture_PatchConvert(
size = imgptr-imgbuf;
img = Z_Malloc(size, PU_STATIC, NULL);
memcpy(img, imgbuf, size);
Z_Free(imgbuf);
if (Picture_IsInternalPatchFormat(outformat))
{