8

の別名分析の形式がVisual C++でどのように使われているかを調べようとしています。また、ポインタ解析、mod-ref解析、ポイント・ツー・アナリシス、または副作用解析とも呼ばれ、解析や形状解析にはかなり近くなっています。Visual C++ではどのような形式のエイリアス解析が使用されますか?

誰かがこの種のことについてMSDNで話し合っているなら、おそらくそこから私の道を見つけることができます。 (私が探してみましたが、MSDNはあなたがそこに多くの時間を費やすことはありません場合は不可解であるように思われる。)

+3

MSDNは厳しいです。 MSDN検索自体を使用するよりも、site:msdn.comでGoogleを使用する方がよいでしょう。 –

+0

エイリアスの結果は最適化をたくさん無効にするので、できるだけ多くの武器を持ち込むと思います。だから私は答えが簡単だとは思っていません。たとえ彼らが「ポイント・ツー」分析を使用していても、フロー・センシティブ/センシティブ・センシティブ/非センシティブ/フィール・センシティブ/非イントラ・プロシージャー、プロシージャー、クロスコンパイル・ユニットなど、さまざまなバリエーションがあります... 質問? –

+1

@イラバクスター:それは私が把握しようとしているものです。それはフロー、コンテキスト、フィールド、オブジェクトなどの影響を受けますか?その背後にあるもの:私のphd論文の文献レビューをしていますが、gcc、LLVM、およびその他のコンパイラの答え(または答えを見つける方法)を知っていることがわかりましたが、Visual C++ 。 –

答えて

2

をMSDNのドキュメントで、純粋に行く:

/Oa)「エイリアシングを負うものではありません」と関連のオプションがありVisual Studio 2008で削除されました。

その Iから

__declspec(restrict)と__declspec(noalias)が追加されました(2003年またはそれ以前の、またOptimization best practicesを参照してください)

は、デフォルトでは、コンパイラ/オプティマイザは、(C++のルールの下でエイリアシングを前提としていることを結論うおおまかに言えば、同じタイプのポインタは同じメモリを指しているかもしれません)。これは、過度に積極的なグローバル/ OAオプションによるエラーを避けるための合理的な動きと思われます。

また、リンク時コードの生成によって、非エイリアシングを検出できる範囲が拡大すると想定します。


最高のMSDN以外のリファレンスは、VC++ team blogです。ただし、コンパイラがエイリアス解析で少し時間を費やしていることを示しています。ビデオがリンクされたChannel9かもしれない。

(一部の人々は、VC++のコメントでより多くの情報を求めると運を持っていた。ヒントヒント...)


フェニックスはVS2010で終わった場合、私は知らない[​​編集]、ビデオは6時にエイリアシングについて語りますが、壮大なものはありません。

関連する問題