- 位置
- 断片化されたヒープ (ノードごとに malloc) - いくつかの異なる方法で非効率的 (遅い割り当て、遅いアクセス、メモリの断片化)
- ヒープ内、1 つの大きなチャンク内 - 再割り当てが必要な場合、データ構造によって得られるすべての柔軟性が失われます
- スタック内 - スタックのサイズはかなり制限される傾向があるため、スタックに大きな構造体を割り当てることはまったく推奨されません
彼らの大きな利点である挿入 O(1) は、断片化されたメモリの環境や、さらに 10 バイトを取得するためにメモリ アロケータを何千回も呼び出す環境では、あまり役に立たないように見えます。
明確にするために編集:
この質問はインタビューで尋ねられました。これは職場での質問ではないため、少数の標準アルゴリズムのセットから正しい決定に盲目的につまずくことを期待する通常のヒューリスティックスは適用できません。
既存の回答とコメントでは、「malloc はそれほど遅くない」、「malloc は断片化と部分的に戦う」と述べています。別のデータ構造、たとえば C++ ベクトルの C ポート (つまり、十分なサイズのシーケンシャル メモリを割り当て、データが拡張する場合は 2 倍のチャンクに再割り当てする) を使用すると、すべての問題が解決されますが、高速性が失われます。挿入/削除。リンクされたリスト (どこに割り当てられていますか?) がベクトルよりもはるかに優れているシナリオはありますか?