(c++ .Net Win32 コンソール) コードにfor
ループがあり、できるだけ速く実行する必要があります。そのため、コンパイラにRAMに格納する代わりにレジスタを使用させる必要があります。
MSDN は次のように述べています。
register キーワードは、可能な場合、変数がマシン レジスタに格納されることを指定します。
これは私が試したものです:
for(register int i = 0; i < Size; i++)
コンパイラが生成する逆アセンブリ コードを見ると、次のように表示されます。
012D4484 mov esi,dword ptr [std::_Facetptr<std::codecvt<char,char,int> >::_Psave+24h (12DC5E4h)]
012D448A xor ecx,ecx
012D448C push edi
012D448D mov edi,dword ptr [std::_Facetptr<std::codecvt<char,char,int> >::_Psave+10h (12DC5D0h)]
012D4493 mov dword ptr [Size],ebx
012D4496 test ebx,ebx
012D4498 jle FindBestAdd+48h (12D44B8h) //FindBestAdd is the function the loop is in
012D449A lea ebx,[ebx]
アセンブリ コードがdword ptr
where I usedregister
キーワードを生成しないことを期待しています。
では、コンパイラがレジスタを使用できるかどうかを知るにはどうすればよいでしょうか。また、コンパイラにレジスタから直接読み書きさせるにはどうすればよいでしょうか。