SDL2程序在最小化时会消耗大量内存
SDL2 program eats a lot of memory when minimized
我只是想用简单的渲染器创建一个简单的SDL2窗口。当我调试它时,它运行正常,内存仍然正常。但当我最小化它时,按下最小化按钮,然后内存突然继续上升,只有当我重新打开那个窗口时,内存才会恢复正常。
内存尖峰
代码:
#include <SDL.h>
#include <SDL_image.h>
int main(int argc, char* args[]) {
SDL_Window* gWindow;
SDL_Renderer* gRenderer;
SDL_Texture* gTexture;
SDL_Surface* temp;
//Init
SDL_Init(SDL_INIT_VIDEO);
gWindow = SDL_CreateWindow("Test", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 1366, 768, SDL_WINDOW_SHOWN);
gRenderer = SDL_CreateRenderer(gWindow, -1, SDL_RENDERER_ACCELERATED);
IMG_Init(IMG_INIT_PNG);
//loading medias
temp = IMG_Load("assets/sprites/700.png");
gTexture = SDL_CreateTextureFromSurface(gRenderer, temp);
SDL_FreeSurface(temp);
//The main loop
bool quit = false;
SDL_Event e;
while (!quit)
{
while (SDL_PollEvent(&e) != 0)
{
if (e.type == SDL_QUIT)
{
quit = true;
}
}
SDL_RenderClear(gRenderer);
SDL_RenderCopy(gRenderer, gTexture, NULL, NULL);
SDL_RenderPresent(gRenderer);
}
//Destroy things
SDL_DestroyTexture(gTexture);
gTexture = NULL;
SDL_DestroyRenderer(gRenderer);
SDL_DestroyWindow(gWindow);
gWindow = NULL;
gRenderer = NULL;
IMG_Quit();
SDL_Quit();
return 0;
}
switch (m_event.window.event)
{
case SDL_WINDOWEVENT_MINIMIZED:
while (SDL_WaitEvent(&m_event))
{
if (m_event.window.event == SDL_WINDOWEVENT_RESTORED)
{
break;
}
}
break;
...
因此,当最小化窗口时,SDL会一直等待事件。没有进一步的代码会导致内存泄漏,因为在窗口恢复之前,它一直处于延迟轮询循环中。我将泄漏追溯到SDL_RenderClear,它不应该在最小化的情况下运行。
我刚刚运行了你的代码并编译了它。看起来很好。然而,你确实提到,当你最小化程序时,你的ram meter会增加,在它崩溃之前,你能重复多久?它会崩溃吗?这可能是正常的行为。如果你的程序崩溃,那就是内存泄漏,这可能意味着忘记取消分配指向内存对象/变量的其他指针。
相关文章:
- 有没有一种方法可以测量c++程序的运行时内存使用情况
- 内存清理程序报告全局对象构造中未初始化值的使用
- 多线程程序中出现意外的内存泄漏
- C++ 程序不会因为内存而终止
- 可视化 使用 VS Code 查找C++应用程序中的内存泄漏
- C++程序什么都不做,但瓦尔格林德显示内存分配
- 应用程序内存使用量减少
- 当注入程序的内存空间时,如何读取从 0 到 0xFFFFFFFFF 的每个字节?我正在创建模式扫描仪
- 如何运行外部程序,向其传递内存地址以读取/写入?
- 在C++应用程序中使用 Tensorflow:如何释放 GPU 内存
- C++程序错误:malloc():内存损坏
- 任务管理器 - C/C++ 应用程序 - 分配的地址空间与已用内存
- OpenGL GLFW 应用程序 - 客户端内存限制
- 我们如何在ESP8266上减小程序内存上的代码大小
- shared_ptr的删除程序是否存储在自定义分配器分配的内存中?
- 正在从程序内存中分解x指令
- 随着时间的推移,我的程序越来越慢,我不知道为什么.内存泄漏
- 开发C++在运行大内存程序时崩溃
- 动态内存c++程序中的字符串错误
- 在linux上编写的一个简单的c++共享内存程序:分段错误