Cにおいて、char
の配列のインデックスが0
から2^(sizeof(size_t) * CHAR_BITS)
の範囲とすることができるが、アレイのメンバーの数は、その数に1を加え、缶」であります変数size_t
によって保持されます。例えば最大配列のインデックスと、プラットフォーム上での長さが
は、のx86で、sizeof(size_t)
が4
であれば、配列が一杯になった場合、インデックスは、0xFFFFFFFF
に0
から行くが、メンバーのカウントができ、0xFFFFFFFF + 1
です。 sizeof(size_t)
で保持することはできません。
1)これは正しいですか?
2)最高のインデックスを0xFFFFFFFE
に制限することを検討していますが、より良い解決策はありますか?
私はこの例が極端であることを知っていますが、参考として使用したいと思います。
これは、 'size_t'もバイト単位の最大サイズであるため、' char'配列にのみ当てはまります。 sizeof(T)> 1の場合、最大インデックスは '2^sizeof(size_t)/ sizeof(T)'になり、それに1を加えても安全です。 – Barmar
理論的な配列サイズ制限を超える前に、仮想メモリが使い果たそうとします。 – tkausl
なぜか@tkauslですか? '0xFFFFFFFF'はちょうど4ギガバイトですが、仮想メモリはそれ以上の物理的なメモリより大きくはありませんか? –