ページ 11

vc2008デバッグモードでインライン展開したい

Posted: 2016年6月25日(土) 21:16
by 8127
個人でDXライブラリを使って中規模(計30000行くらい)のゲーム開発をしているものです。

プログラムにおいて1フレームで次のような処理が20000回ほど呼ばれます。

コード:

if(1==sprite->alive){
このコードを次のようにリファクタリングしました。
・aliveをprivateにする
・inline指定付きのgetterをクラスSpriteに実装する

コード:

inline signed char getAlive(){
	return alive;
}
if(1==sprite->getAlive()){
そうしたところ、debugモードにおいて処理が非常に重くなり手が付けられなくなりました。(releaseでは問題なく動作します)
逆アセンブルして原因を調べたところ、getterがinline展開されていないことがネックでした。
このままではデバッグができないので、何とかdebugモードでinline展開できる方法(vc2008の設定やコンパイルオプション等)
をご教授いただけないでしょうか。
環境はwindows10,VisualStudio2008 ExpressEditionです。
よろしくお願いします。

追記

Posted: 2016年6月25日(土) 21:50
by 8127
追記します。
コンパイルオプションは
/Od /Oi /I "./DxLib/" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /Gm /EHsc /RTC1 /MTd /fp:fast /Yu"stdafx.h" /Fp"Debug\naraku_m_h.pch" /Fo"Debug\\" /Fd"Debug\vc90.pdb" /W4 /nologo /c /ZI /TP /FI "StdAfx.h" /FI "always_include.h" /errorReport:prompt
です。
インライン関数の展開/Ob1は試しましたがdebugモードでは使用できないようでした。

Re: vc2008デバッグモードでインライン展開したい

Posted: 2016年6月25日(土) 22:51
by dic
はじめまして、問題のインライン展開ですが、cppソースに書かれていらっしゃるのでしょうか?
もし、そうならば、ヘッダーファイルに書いてみてはどうでしょうか?

第8章 インライン関数・再び
http://www7b.biglobe.ne.jp/~robe/cpphtm ... 02008.html

上のURL先が参考になれば幸いです。
すでに検討済みであれば、申し訳ありません。

Re: vc2008デバッグモードでインライン展開したい

Posted: 2016年6月25日(土) 23:49
by 8127
こんばんは。
inline関数の定義はヘッダ中のクラス定義の中に書いています。
下の2通りを試しましたが、どちらもinline展開されませんでした。

コード:

class Sprite{
    inline signed char getAlive(){
        return alive;	
    }
};

コード:

class Sprite{
    signed char getAlive();
};
inline signed char Sprite::getAlive(){
        return alive;	
}
MSDNに載っている__forceinlineキーワードも試しましたが無効でした。