SDL:在事件循环的每次迭代中定义事件结构是否效率低下?

SDL: Is defining the event struct with every iteration of the event loop inefficient?

这是 wiki 上给出的示例,也是我见过的每个教程的做法...

while (1) {
    SDL_Event event;
    while (SDL_PollEvent(&event)) {
        /* handle your event here */
    }
    /* do some other stuff here -- draw your app, etc. */
    }

如果我的游戏循环中的更新函数中有这种事件循环,我认为程序在循环的每次迭代中都重新定义并为新事件结构重新分配位置是不是错了?我认为这是一种低效的做法,我错了吗?难道不能在别处定义一次事件结构,并在程序的整个生命周期中填充不同的事件,而无需在更新函数的每次迭代中完全重新定义吗?如果是这样,我希望在哪里定义事件结构?在我的游戏或主要源文件或什么中全局?

将事件分配到堆上有什么好处(如果有的话)?

首先在栈上声明变量event,这个基本没有什么开销。因为它是一个 POD type,所以没有必须是 运行 的构造函数 and/or 析构函数。此外,变量的生命周期在循环迭代结束时结束,并将在下一次迭代开始时重新开始。编译器会发现它可以在迭代之间重用变量。