我正在开发一个使用 SDL2 呈现的单线程图形程序。有关较小示例,请参见结尾。
它可以在旧的 Linux 机器和不太旧的 Mac 上运行。Linux 计算机有 1.60GHz 的处理器,而 Mac 的处理器是 2.2GHz。Linux 上的 SDL 版本是 2.0.8,而 Mac 上的 SDL 版本是 2.0.10。在两台计算机上,我都clang++使用优化标志-O3和-flto. 我调用了可执行文件./intergrid -fullscreen -pixel-size 3(本质上,我让程序绘制了很多像素。)
出于某种原因,较慢的 Linux 计算机毫不费力地执行了该程序,而 Mac 则需要几秒钟才能渲染第一帧。正如预期的那样,当我使用-no-draw标志禁用图形时,Mac 比 Linux 机器快。
编辑:Linux 计算机具有用于图形的“Intel Haswell Mobile”,而 Mac 则列出“Intel Iris Pro 1536 MB”。
这是一个最小的可重现示例:
#include <SDL2/SDL.h>
#include <stdio.h>
int main(void)
{
SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER);
SDL_Window *window = SDL_CreateWindow(
"Example",
SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
0, 0,
SDL_WINDOW_SHOWN);
SDL_SetWindowFullscreen(window, SDL_WINDOW_FULLSCREEN_DESKTOP); …Run Code Online (Sandbox Code Playgroud) 我想要一个可变大小的结构,但我想将具有特定大小的结构实例嵌入到另一个结构中。想法是这样的:
struct grid {
size_t width, height;
int items[ /* width * height */ ];
};
struct grid_1x1 {
size_t width, height;
int items[1];
};
struct grid_holder {
struct grid_1x1 a, b;
};
int main(void)
{
struct grid_holder h = {
.a = { .width = 1, .height = 1, .items = { 0 } },
.b = { .width = 1, .height = 1, .items = { 0 } },
};
struct grid *a = (struct grid *)&h.a, *b …Run Code Online (Sandbox Code Playgroud)