SDL 1.2:如何确定系统内存中分配的 SDL_Surface 的内存使用情况

SDL 1.2: How to determine memory usage of an SDL_Surface allocated in system memory

是否有 SDL 1.2 函数 returns 内存使用分配给 SDL_Surface 指针?

具体来说 SDL_Surface* 由 IMG_Load() 返回。

查看结构,似乎这会给出正确的结果:

SDL_Surface* surface = IMG_Load(image_file_name);
size_t memory = surface->w * surface->h * surface->format->BitsPerPixel / 8 

...至少对于我的具有 32 位像素的目标架构而言。但是有没有 SDL 1.2. API函数还是更准确的方法?

没有用于确定表面内存使用情况的 SDL 1.2 函数。如果您自己创建表面,而不是通过 SDL_image,那么您可以使用自定义分配器来跟踪分配。

您的代码可能应该足够接近估计值。但是,我会改用间距,因为每行可能有填充字节:

size_t memory_bytes = surface->pitch * surface->h;

(请注意,这可能不适用于使用 SDL_RLEACCEL 标志的表面。)

如果您想对结构其余部分的影响迂腐,请添加:

sizeof(SDL_Surface)
 + sizeof(SDL_PixelFormat)
 + (surface->format->palette == NULL? 0
    : sizeof(SDL_Palette)
       + sizeof(SDL_Color) * surface->format->palette->ncolors)