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

时间:2015-05-13 08:11:11

标签: sdl

是否有SDL 1.2函数返回分配给SDL_Surface指针的内存使用量?

具体而言,IML_Load()返回SDL_Surface *。

观察结构,似乎这会给出正确的球场结果:

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

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

1 个答案:

答案 0 :(得分:2)

没有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)