char bigchar[ 1u << 31 - 1 ]; の場合に malloc() を使用する理由うまく動作しますか?

その理由は 2 つあります:

<オール> <リ>

一部のシステムは仮想メモリ管理を行わないため、移植性のためです。

<リ>

必然的に、この配列を便利にするために小さなチャンクに分割する必要があります。次に、すべてのチャンクを追跡し、最終的に、不要になった配列のチャンクの一部を「解放」し始めると、ヒットしますメモリの断片化の問題。

全体として、多くのメモリ管理機能を実装することになります (実際にはほとんど malloc を再実装します) が、移植性の利点はありません。

したがって、理由:

    <リ>

    メモリ管理のカプセル化と標準化によるコードの移植性。

    <リ>

    コードの再利用による個人の生産性の向上。


ご覧ください:

malloc() と C/C++ ヒープ

オブジェクトのリストをヒープまたはスタックに格納する必要がありますか?

C++ どちらが速いですか:スタック割り当てまたはヒープ割り当て

C++ での適切なスタックとヒープの使用法?

C/C++ スタック割り当てについて

C++ のスタック、静的およびヒープ

メモリ管理、ヒープ破損、および C++ について

ヒープではなくスタック上に新規 (alloca と malloc のように)


malloc を使用すると、配列を拡大および縮小できます。配列は動的になるため、必要なものを正確に割り当てることができます。