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 と y の「線」だけで画像を変換できると聞きました。しかし、これがどのように機能するかは別の問題です。

Mark Ingram からの回答は、まさに私が問題を理解するために必要なものでした。ありがとう

編集:ああ、私の問題を十分に説明していないことがわかりました。私は画像を持っていなかったので、プログラムにロードしました。私は 50Hz の周波数でフレームを記録するカメラを持っているので、記録中にフレームを保存する時間がありません。

4

2 に答える 2

8

メモリが不足しています。32 ビット システム (少なくとも Windows) では、最大 ~2GB のメモリしか割り当てることができません。必要な場合にのみデータを動的にロードする必要があり、画像データが不要になったら、もう一度破棄します。

実際には、メモリはブロック単位で割り当てられる (つまり、連続して割り当てられない) ため、制限は 2GB より低くなります。これは、小さなオブジェクト割り当てと大きなオブジェクト割り当てを混在させると、ヒープの断片化が発生し、実際に割り当てることができるメモリの量が大幅に減少することを意味します。

于 2013-07-24T08:42:28.597 に答える