Biz*_*han 1 c++ compiler-construction performance assembly cpu-registers
我的for
(c ++ .Net Win32控制台)代码中有一个循环,必须尽可能快地运行.所以我需要让编译器使用寄存器而不是将其存储在RAM中.
MSDN说:
register关键字指定变量将存储在机器寄存器中(如果可能).
这是我试过的:
for(register int i = 0; i < Size; i++)
Run Code Online (Sandbox Code Playgroud)
当我查看编译器生成的反汇编代码时,我看到:
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]
Run Code Online (Sandbox Code Playgroud)
我期望汇编代码不生成dword ptr
我使用register
关键字的地方.
所以,我怎么会知道,如果有可能的编译器使用寄存器,我应该怎么做才能强制编译器直接读取/从/到寄存器写.
Age*_*ien 14
该register
关键字只是一个提示,并通过最现代的编译器忽略.从本质上讲,这是因为编译器在优化和确定寄存器中应该放置什么比编程器更好.
因此,您不能强制编译器使用寄存器,即使您可以也不应该这样做.如果需要最佳速度,请在编译器设置中启用最大优化级别.
归档时间: |
|
查看次数: |
3240 次 |
最近记录: |