1

ヒープの断片化の回避に関する多くの記事を認識しています。私の質問は、ベクトルを使用してデータを保存するときに何が起こるかということと関係があります。

class foo{
public:
std::vector<bar>; // Or I can have std::vector<bar*>
};

new または delete の使用に問題はありません (メモリ リークはありません。バーが使用されていない場合は非常に明確であり、必要に応じて delete を呼び出すことができます)。しかし、ヒープの断片化に関しては、どちらが優れていますか? これにより、スタック オーバーフローが発生しやすくなりますか?

編集:実際に追加する新しい情報はありません。皆さんに感謝したいと思います。C++ でタグ付けされた質問には、多くの知識豊富で親切な人が集まるようです。とても素敵です。ありがとうございました。

4

4 に答える 4

1

OP は何をするかについて基本的な誤解をしているようです: 連続したメモリ ブロックを heapstd::vectorに割り当てます。したがって、オブジェクト自体以外に何も保存する必要がない場合は、オブジェクトを自分の中に入れてください。vectorvector

したがってstd::vector<bar>、あなたの場合は正しい選択のようです。また、時期尚早にヒープの断片化について心配する必要はありません。コンパイラーに心配させてください。(しかし、 prefetcher のフィードについて心配する必要があります。そのため、何かstd::vector<bar>を保存するための標準的な選択が必要です。)

于 2014-07-10T08:21:30.620 に答える