質問

サイズが4GB以上の画像をロードしようとすると、例外をスローする画像操作ライブラリを使用しています。それは64ビットであると主張していますが、64ビットライブラリではそれよりも大きいロード画像を許可しませんか? 64ビットメモリモデル/コンパイラを使用してCライブラリを再コンパイルしたと思いますが、署名されていない整数を使用して、64ビットタイプを使用するためにアップグレードに失敗しました。

それは合理的な結論ですか?

編集 - 後の考えとして、OSメモリは非常にfageりながら、大きなチャンクの割り当てはもはや不可能になりますか? (再起動の直後にも機能しませんが、不思議に思うだけです。).NETの下はどうですか? .NET管理されたメモリは非常に断片化され、大きなチャンクの割り当てが失敗する可能性がありますか?

役に立ちましたか?

解決

それは合理的な提案ですが、正確な原因は多くのことである可能性があります - たとえば、どのOSを実行しているのか、どのくらいのRAM /スワップがありますか?アプリケーション/OSは仮想メモリを過剰にコミットすることはないため、画像を開くには4GB(またはそれ以上)のフリーRAMが必要です。

興味深いことに、4GBの境界では明確な停止のように見えます。つまり、3.99GBの画像が成功しますが、4GBの1つは失敗します。

アップデート

あなたの2番目の質問に関して - そうではありません。ほとんどすべての最新のOSが仮想メモリを使用するため、各プロセスは独自の隣接するアドレス空間を取得します。プロセスのアドレス空間内の単一の連続した領域は、隣接する物理的RAMに裏付ける必要はありません。それは、それらが隣接するように作られたRAMの多数の物理的な領域で構成することができます。したがって、OSには、4GBの4GBチャンクが無料で4GBのチャンクを提供する必要はありません。

アプリケーションは、隣接する4GBリージョンの余地がないように仮想アドレス空間である可能性がありますが、64ビットアドレススペースのサイズを考慮すると、シナリオではおそらくほとんどありそうにありません。

他のヒント

はい、おそらくバイナリファイル形式自体が画像のサイズを制限しない限り。

あなたのフォローアップに答えるために、私は最近読みました これ 記事とそれが面白いと感じました。

そして、はい、.NETは問題を抱える可能性があります メモリの断片化.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top