この質問は、私が開発しているプログラムに関するものです。
行のセットまたは 2GB を超える行がネットワーク経由で送信されないようにする必要があるプロジェクトに取り組んでいます (ネットワークは 2GB を超えるグループでデータを送信できません)。コードに適切な変更をすべて加えたので、これ/これらのグループは送信されませんが、テスト ケースを作成しようとしています。
2 GB 以上を占める 10 億行未満の行を作成するテストを既に作成しました。プログラムは、ネットワーク経由で送信される前に、これらの行グループを適切に除外します。
私が直面している問題は、単一の文字列を持つ列を保持する単一の行を作成するか、その行の中に文字列を保持する列のコレクションを作成する必要があることです2GB
。しかし、文字列が に近づくと2GB
、malloc は を返しますNULL
。
いくつかの調査を行ったところ、おそらく十分な連続メモリがないことがわかったので、より小さな文字列で列を追加し始めました。2GB
一度に多くを割り当てる必要がないように、文字列を 64 列に分割するところまで行っています。私はまだ同じ問題に直面していますが、何かを見落としているのではないかと疑っています。
これは、64 ビット Windows 7 システム上の 64 プロセスです。8GBのRAM。(ただし、24GB RAM を搭載した 64 ビットの Red Hat マシンでもテストしました)
システムが近づいたときにプログラムメモリを割り当てない理由について誰かが洞察を持っています2GB
か?
PS私はまた、各プロセスが64ビットシステムで割り当てることができるメモリを調べましたが、それは終わりました100TB
。あまりにも多いことを考えると、2GB に近づくにつれて割り当てることができないという事実は、私を本当に混乱させます。