我的(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
关键字。
那么,我怎么知道编译器是否可以使用寄存器以及我应该怎么做才能强制编译器直接从寄存器读取/写入寄存器。