小编Jud*_*eMH的帖子

为什么 Mac 上的 SDL 比 Linux 慢这么多?

我正在开发一个使用 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)

c++ linux macos performance sdl

7
推荐指数
1
解决办法
1121
查看次数

从具有灵活数组成员的结构转换为不具有灵活数组成员的结构是否是未定义的行为?

我想要一个可变大小的结构,但我想将具有特定大小的结构实例嵌入到另一个结构中。想法是这样的:

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)

c struct c99

3
推荐指数
1
解决办法
298
查看次数

标签 统计

c ×1

c++ ×1

c99 ×1

linux ×1

macos ×1

performance ×1

sdl ×1

struct ×1