这是一个基于堆栈的内存

lil*_*lzz 3 c

#include <SDL/SDL.h>

int main (void)
{
  SDL_Surface* screen;
  screen=SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

screen是指向后台缓冲区的指针,用于绘图,需要相当多的内存.

我的问题,屏幕定义类似于基于堆栈的内存,因为堆内存将使用malloc.由于堆栈内存有限,因此上面的代码很糟糕,因为它占用了大量有限的堆栈内存,而应该使用堆内存.但是这段代码来自开源代码,我认为他们知道自己在做什么.

Jon*_*rdy 6

这里screen是指向动态分配SDL_Surface结构的指针,该结构本身具有void* pixels指向实际像素数据的成员.指针只占用4或8个字节的堆栈空间,具体取决于您是分别使用32位还是64位系统.

SDL在您调用时释放主视频表面SDL_Quit(),但是当您自己使用分配表面时SDL_CreateRGBSurface(),必须调用SDL_FreeSurface()以释放内存.您还可以找到SDL_Surfacein 的声明,以SDL_video.h获取其成员的完整列表.