最適化にハマる

| コメント(0) | トラックバック(0)

非常に躓きそうになるのでメモ。

__declspec(dllexport) を利用して、関数をエクスポートしているが、ふとReleaseビルド物件をDumpbinでExports一覧を見たところ、

FuncA = _FuncB
FuncB = _FuncB
FuncC = _FuncB

といった感じの関数名が表示されることがあった。

Relaseビルドだと起こる可能性がある現象。

Debugビルドだと、最適化無効なので、

FuncA = _FuncA
FuncB = _FuncB
FuncC = _FuncC

のように名前付けされるんだけど、なぜそうならないのかと悩むこと暫し。
#@付いたり変な名前付いたりする場合もあるけど、それぞれ異なる値になるはず。

 

Relaseビルドの場合、標準で最適化が有効になっているのだが、これ、エクスポート関数も、処理内容が同じだと1つに纏める、すごい最適化処理が行われているらしい。

関数の中身はあとで書くことにして、適当に済ませていると、同じ内容の処理は一纏めにされてしまう。
#中身をちゃんと書くと、別々の定義になる。

VC++の最適化、結構強力なので、たとえば、

int* Func(int* n, bool f) { /* あとで書く */ return n; }
__declspec(dllexport) int* FuncA(int* a) { return Func(a, true); }
__declspec(dllexport) int* FuncB(int* b) { return Func(b, false); }
__declspec(dllexport) double* funcC(double* c) { /* あとで書く */ return c; }

↑こんな状態のときにDumpbinすると、見られる。
#VS2010にて。

覚えておかないと、延々、プロジェクト定義とにらめっこすることになる。

トラックバック(0)

トラックバックURL: https://blog.fne.jp/mt/mt-tb.cgi/302

コメントしちゃいなよ

    

サイトカウンタ

Total: 211,632 Hits, (Recent24Hours: 0 Hits)
~ Since 2010/01 ~

埋め込みツイッター

取得失敗;;
Now: 2024/11/21 18:25:00 JST

このブログ記事について

このページは、ふぅみんが2010年9月22日 17:54に書いたブログ記事です。

ひとつ前のブログ記事は「悲しみは突然に」です。

次のブログ記事は「数の問題」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

月別 アーカイブ

2024年5月

 日   月   火   水   木   金   土 
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

埋め込みQRコード