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)
是否有 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)