したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | メール | |

管理人の独り言(プログラミング関連)

2318774さん:2010/06/03(木) 09:07:14
コンパイラの最適化の話。
-----
static wchar_t *GetFfxAllocString(const wchar_t *str){
const int len = std::wcslen(str);
const unsigned int size = (len + 1) * sizeof(wchar_t);
wchar_t *ret = (wchar_t*)FfxAlloc(size);
if(ret){
std::wcscpy(ret, str);
}
return ret;
}
-----
こんなソースを書いた。ここで“FfxAlloc”は指定したバイトのメモリを確保してくる関数である。
で、この関数は現状文字列リテラルしか与えてないので、関数呼び出し部ではインライン展開されて、wcslenは呼び出されすらしない(すべて即値になる。)。
まあ、その最適化は良いんだ。問題は、wcscpyである。何故VC++はこれを即値で展開してくれないかなあ。
つまりNASM風に書くならば、
-----
mov eax, dword [ret]
mov dword [eax], 0x42004100
mov dword [eax+4], 0x00004300
-----
みたいにさ(この場合はL"abc"。多分。)。
で、これが出来ないから無駄に条件分岐が多くなったり、call命令が多くなって遅くなる。まあ、現状のCPUならば気にならないだろうが・・・


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板