malloc/free と比較して C99 VLA を使用するのは良い考えでしょうか? 質問する

malloc/free と比較して C99 VLA を使用するのは良い考えでしょうか? 質問する

C99 VLA を使用するのは良い考えでしょうか? malloc/free と比較して、VLA を使用するのが適切なのはいつですか? (VLA はスタックを破壊する可能性があるため)

ベストアンサー1

はい、スタックが爆発する可能性がある場合を除きます。必要に応じてスタックのサイズを変更することもできます。OS ごとに方法が異なりますが、可能です。VLA の利点は次のとおりです。

  • 高速: スタック ポインターやフレーム ポインターの調整はいずれにせよ実行されるため、VLA のコストはほぼ 0 です。

  • 簡単: 定義がシンプルで、初期化するポインターや解放するチェックが不要、メモリ リークのリスクもありません。

  • 各スレッドが独自のスタックを持つため、自動的にスレッドセーフになります。 を使用するときに発生する可能性がある問題の 1 つであるロックが不要なため、スケーリングも向上しますmalloc/free

  • 読みやすい: 非常にシンプルなコンセプトなので、微妙なバグが発生する可能性が低くなります。

いくつかの欠点があります:

  • サイズ制限: すでに述べたように、スタックが爆発する可能性があります。

  • バッファ オーバーフローは、ヒープ メモリの場合よりも少し深刻です (クラッシュするアプリケーションの方が、データを黙って破壊し、最終的に無関係な命令でクラッシュするアプリケーションよりも優れているため、これは利点であると主張する人もいます)。

  • 移植性: すべてのコンパイラがこれを実装しているわけではありませんが、多くの場合、シミュレートできますalloca(注意: セマンティクスは少し異なりますが、それほど深刻なものではありません)。

おすすめ記事