「プログラム全体の最適化->リンク時コード生成の使用」をアクティブにしたほかに、Visual Studio2012で/opt:ref/VERBOSEオプションを使用します。/ opt:refは未使用の関数を削除することになっていますが、「リンクタイムコード生成を使用する」を指定すると、デフォルトで未使用の関数が削除されるはずだという印象を受けました。
私のテストプログラムでは、最終的な実行可能ファイルから削除されると予想されるテスト関数を使用していますが、VS出力で次のことが確認されているようです。
Discarded "int __cdecl testMe(int)" (?testMe@@YAHH@Z) from Test.obj
しかし、/FAで生成された*.asmファイルを見ると、次の関数がリストされていることがわかります。
; Function compile flags: /Ogtp
; File c:\users\g.m\documents\visual studio 2012\projects\Test.cpp
; COMDAT ?testMe@@YAHH@Z
_TEXT SEGMENT
?testMe@@YAHH@Z PROC ; testMe, COMDAT
...
それで、それは最終的な画像から削除されますか?
編集:
最適化する簡単なコード
static int testMe(int i)
{
return i + 1;
}
int main()
{
auto res = testMe(0);
}
私が非常に疑わしいと思うのは、関数が「静的」である場合でも、*。asmファイルに表示されていることです。