[解決済み] どちらが速いですか?スタックアロケーションとヒープアロケーション
2022-03-18 06:25:22
質問
この質問はかなり初歩的に聞こえるかもしれませんが、これは私が一緒に働いている他の開発者と議論したことです。
私は、ヒープアロケートするのではなく、スタックアロケートできるところはするように気をつけていました。彼は私と話しながら肩越しに見ていて、「性能的には同じだから必要ない」とコメントしました。
私はいつも、スタックを大きくするのは一定時間であり、ヒープ割り当てのパフォーマンスは、割り当て(適切なサイズの穴を見つける)と割り当て解除(断片化を減らすために穴をつぶす、私が間違っていなければ多くの標準ライブラリ実装では削除の際にこの作業に時間がかかるため)の両方についてヒープの現在の複雑さに依存するという印象を抱いていました。
これはおそらく、非常にコンパイラに依存するものだと思います。特にこのプロジェクトでは、私は メトロワークス のコンパイラを使用しています。 PPC アーキテクチャを使用しています。この組み合わせについての洞察は最も有用ですが、一般的に、GCC、およびMSVC++については、どうでしょうか?ヒープ割り当てはスタック割り当てのように高性能ではないのでしょうか?違いはないのでしょうか?それとも、その差はあまりに小さいので、無意味なマイクロ最適化になってしまうのでしょうか。
どうすれば解決するの?
スタックポインタを移動させるだけなので、スタックアロケーションの方がはるかに高速です。 メモリプールを使えば、ヒープアロケーションと同等のパフォーマンスを得ることができますが、これには若干の複雑さとそれ自身の頭痛の種が伴います。
また、スタックとヒープの違いは、パフォーマンスだけでなく、オブジェクトの予想される寿命についても多くのことを教えてくれます。
関連
-
[解決済み】非静的メンバ関数への参照を呼び出す必要がある
-
[解決済み】C++ - 解放されるポインタが割り当てられていないエラー
-
[解決済み】関数名の前に期待されるイニシャライザー
-
[解決済み】「std::operator」で「operator<<」にマッチするものがない。
-
[解決済み] 数値定数の前にunqualified-idを付けて、数値を定義することを期待する。
-
[解決済み】なぜ、サイズ8の初期化されていない値を使用するのでしょうか?
-
[解決済み] 要素ごとの加算は、結合ループよりも分離ループの方がはるかに高速なのはなぜですか?
-
[解決済み] <は<=より速いのか?
-
[解決済み] Collatz予想の検証を行うC++のコードは、なぜ手書きのアセンブリよりも高速に動作するのでしょうか?
-
[解決済み] JavaScriptでStackとQueueを実装するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン