2

我搜索了这种错误,发现了很多。不幸的是,没有线程真正帮助我。

我有图像文件,我保存在一个array或一个vector或什么中。

大约 1.8 GB(~1439 图像)后std::bad_alloc,内存位置出现错误。所以我尝试以array不同的方式声明,但每次发生相同的错误。

Image* img;
Image img[180000];
Image* img = new Image[180000]

vector<Image> img;

(180k 将是 1 分钟的帧)。记录 1 分钟并不是很重要,但保存超过 ~1439 帧会很好。或者至少要了解为什么会发生此错误,或者更确切地说为什么会发生在 1.8 GB。

也许有人可以帮助或向我解释?

PS:我用的是32位系统


问题是,将图像保存在文件夹或其他东西中的时间需要很长时间。也许我必须找到一种压缩方式,它允许我将图像的必要信息保存在数组中,然后我可以在完成后恢复帧。

我听说您可以将图像转换为包含所有这些信息的 ax 和 ay“线”。但这是如何工作的则是另一个问题。

Mark Ingram 的答案正是我理解问题所需要的。感谢那

编辑:哦,我明白了我解释我的问题还不够。我没有图像并将它们加载到我的程序中。我有一台相机,它以 50Hz 的频率记录帧,所以在记录时我没有时间保存帧。

4

2 回答 2

8

你的内存用完了。在 32 位系统上(至少在 Windows 上),您最多只能分配 ~2GB 的内存。只有在需要时才需要动态加载数据,当不再需要图像数据时,再次将其丢弃。

实际上,该限制将低于 2GB,因为内存是按块分配的(即它不是连续分配的)。这意味着如果您混合使用大小对象分配,您将遇到堆碎片,这将大大减少您实际可以分配的内存量。

于 2013-07-24T08:42:28.597 回答
1

将图像存储在一个文件夹中并一次加载一个。动态内存分配是你的朋友。

通过同时加载 18,000 张图像,我想不出任何办法。即使在超级计算机上,您也永远不会处理它。

于 2013-07-24T08:49:16.220 回答