【发布时间】:2020-11-14 19:20:14
【问题描述】:
我在尝试分别绘制窗口中的每个像素时遇到了这个问题,所以这是我的问题的更简单版本。当我运行这段代码时,进程内存开始迅速增加,直到达到 365 MB 并停止增加。为什么这会占用如此多的内存,我该如何解决这个问题?
#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;
}
【问题讨论】:
-
你期望多少钱?
-
在应用程序中不仅仅是你的代码,尤其是在使用这样的库时
-
我预计它会非常低,接近 20 MB 左右,因为所有
sf::RectangleShape对象每次都被销毁,内存没有理由堆积。 -
"当我运行这段代码时,进程内存开始迅速增加,直到达到 365 MB 并停止增加。" - 只是你没想到,它是不一定是坏行为。
-
驻留大小确实在20MB左右。虚拟大小几乎没有意义。这都是库代码(不是数据)。它在许多应用程序之间共享,即使这是唯一的应用程序,大部分代码也不会在这个小程序中使用。因此它将位于磁盘上,永远不会加载到 RAM。