私は現在、カスタムIRを使用するコンパクトなコンパイラを(Design-Stageで)開発中です。私が抱えている問題は、すべての命令を含む効率的なコンテナデータ構造を選択することです。std :: vectorとstd :: listに似たコンテナデータ構造
基本ブロックには〜10000命令が含まれ、命令は〜250バイトほど大きくなります。
コンパイラには複雑な変換(つまり多数のランダム挿入/削除)があるため、イテレータを無効にしないコンテナデータ構造を持つとリストが使えると思っていました。それは、変換アルゴリズムを単純で容易に続けることができるためです。
一方、キャッシュミスとメモリ断片化に関する既知の問題のため、パフォーマンスが低下します。 std :: vectorはここで役立ちますが、ベクトルを使って変換を実装するのは苦痛になると思います。
メモリのキャッシュミスを減らすためにメモリの断片化が少なく、イテレータを無効にしない別のデータ構造がある場合、質問があります。 これを無視して、リストを使用し続ける必要がある場合。
イテレータの無効化に関する問題を回避することをお勧めします – SirGuy