スタック割り当てとヒープ割り当てのどちらが速いですか?質問する

スタック割り当てとヒープ割り当てのどちらが速いですか?質問する

この質問はかなり初歩的なように聞こえるかもしれませんが、これは私が一緒に働いている別の開発者と行った議論です。

私は、ヒープ割り当てではなく、可能な場合はスタック割り当てするように注意していました。彼は私に話しかけ、私の肩越しに見ながら、パフォーマンス的には同じなのでそれは必要ない、とコメントしました。

私は常に、スタックの拡大には一定の時間がかかり、ヒープ割り当てのパフォーマンスは、割り当て (適切なサイズの穴を見つける) と割り当て解除 (断片化を減らすために穴を縮小する。多くの標準ライブラリ実装では、私が間違っていなければ、削除中にこれを行うのに時間がかかる) の両方のヒープの現在の複雑さに依存するという印象を持っていました。

これはおそらくコンパイラに大きく依存すると思われます。特にこのプロジェクトでは、メトロワークスコンパイラのクリック課金アーキテクチャ。この組み合わせに関する洞察が最も役立ちますが、一般的に、GCC および MSVC++ の場合はどうでしょうか。ヒープ割り当てはスタック割り当てほど高性能ではないのでしょうか。違いはないのでしょうか。それとも、違いが非常に小さいため、マイクロ最適化が無意味になるのでしょうか。

ベストアンサー1

スタック割り当ては、スタック ポインターを移動するだけなので、はるかに高速です。メモリ プールを使用すると、ヒープ割り当てから同等のパフォーマンスを得ることができますが、少し複雑になり、独自の問題が生じます。

また、スタックとヒープはパフォーマンスの考慮事項であるだけでなく、オブジェクトの予想される寿命についても多くのことを教えてくれます。

おすすめ記事