为什么这个代码占用这么多内存
Why is this code taking up so much memory?
我在尝试分别绘制窗口中的每个像素时遇到了这个问题,所以这里是我的问题的简单版本。当我运行此代码时,进程内存开始快速增加,直到达到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,也许还有一些着色器。
相关文章:
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 为什么示例代码访问IUnknown中已删除的内存
- 是否值得降低我的代码的可读性,以便在出现内存不足错误时提供异常安全性?
- 以下代码执行哪种内存分配(动态或静态)?
- 为什么以下C++代码中存在内存泄漏?
- 使用 g++7 构建的代码在访问未对齐的内存时崩溃
- 无法找出我的代码中的内存泄漏
- 存储在哪个内存段(代码/数据段)类(员工)中?
- 带有 GDB 调试器的 VS 代码内存视图
- 我有一个线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x8)错误.我认为这是由于内存管理不好.我可以
- 如何防止使用 std::shared_ptr 的代码中的内存泄漏
- 这行代码中的内存是如何分配"int **v = new int*[n]; "的?
- 在我的以下代码中获取 MLE(内存限制错误).尝试解决 ROUND C 2019(问题 A-摆动行走)启动问题
- 我在 2D 数组的动态内存分配中遇到了一些奇怪的代码C++? 请解释一下这是什么?
- 为什么 valgrind 报告两个内存分配,而我的代码只请求一个?
- 如何使用 gcc 通过命令行限制C++代码的内存使用量?
- CUDA我的共享内存代码不起作用,我缺少什么
- OpenMP 到分布式内存代码
- 在CUDA中共享内存?代码是如何工作的
- 在g++中构建事务内存C++代码