0

作業中のプロジェクトでは、多くの std::list と std::vector が使用されます。ランダムな挿入が必要になることはめったになかったので、std::lists を std::vectors に変更し始めました。しかし、切り替えるたびに結果のコード サイズが増加しました (一定量ではなく、平均で約 1kB)。std::vector が既に使用されていることを考えると、 std::list を std::vector に切り替えるとコードサイズが増加する理由がわかりません。理由はありますか?使用するコンパイラは g++ です。

4

4 に答える 4

2

新しいタイプのベクトルを追加した可能性があります (たとえば、使用した元のコードにvector<int>a を追加した場合vector<string>: これらは異なるタイプであるため、新しいタイプを含めるためにコード サイズが大きくなります)。

于 2012-08-11T12:21:23.933 に答える
0

さて、これ以上の詳細がなければ、私たちは推測することしかできません.

vector-memory は連続しています (これは標準で保証されています) が、list-memory はそうではありません。したがって、コンパイラーがベクトルベースのコードをより適切にベクトル化および展開できる可能性があり、これにより命令が大きくなり、バイナリーコードが長くなります。

于 2013-01-16T09:25:33.727 に答える
0

これはデバッグモードですか?はいの場合、コード サイズを増加させるインライン範囲チェック コードである可能性があります。次のノードが null かどうかを確認するだけでよいリストでは、これはそれほど必要ではないことに注意してください。

于 2012-08-11T12:10:54.397 に答える
-1

std :: vectorには、リストよりも多くの関数とコードが含まれています(リストにランダムアクセスはありません)

于 2012-08-11T12:06:17.190 に答える