为什么这个代码占用这么多内存

Why is this code taking up so much memory?

本文关键字:内存 代码 为什么      更新时间:2024-09-28

我在尝试分别绘制窗口中的每个像素时遇到了这个问题,所以这里是我的问题的简单版本。当我运行此代码时,进程内存开始快速增加,直到达到365MB并停止增加。为什么这会占用这么多内存,我该怎么办才能解决这个问题?

#include <SFML/Graphics.hpp>
int main() {
sf::RenderWindow window{ sf::VideoMode{ 1024, 960 }, "Pixels", sf::Style::Close };
while (window.isOpen()) {
sf::Event sfmlEvent;
while (window.pollEvent(sfmlEvent)) {
if (sfmlEvent.type == sf::Event::Closed) {
window.close();
}
}
window.clear();
for (int i = 0; i < window.getSize().x; ++i) {
for (int j = 0; j < window.getSize().y; ++j) {
sf::RectangleShape rect{ { 1.0f, 1.0f } };
rect.setPosition(i, j);
window.draw(rect);
}
}
window.display();
}
return 0;
}

您正在做的是为每帧的每个像素创建一个新的sf::RectangleShape。sf::RectangleShape类有4个浮点数,分别表示x、y、宽度和高度。每帧创建的矩形总数为983040,每个矩形由四个浮点组成,这意味着每帧创建近400万个浮点,占用一吨内存。我不确定你到底想做什么,但如果你想精确控制单个像素,你应该在GPU上使用OpenGL,也许还有一些着色器。