int与unsigned char

Dav*_*eng 2 c c++ optimization

假设我们有一个运行100次的循环.用unsigned char而不是int用它的计数器有所作为吗?还用i += 1U而不是i++?或者编译器会处理这个问题?

Kir*_*sky 7

在简单的情况下intvs unsigned char为我提供相同的代码:

    for ( unsigned char i = 0; i < 100; ++i ) {
01081001  mov         esi,64h  
01081006  jmp         main+10h (1081010h)  
01081008  lea         esp,[esp]  
0108100F  nop  
        std::cout << 1 << std::endl;
01081010  mov         eax,dword ptr [__imp_std::endl (108204Ch)]  
01081015  mov         ecx,dword ptr [__imp_std::cout (1082050h)]  
0108101B  push        eax  
0108101C  push        1  
0108101E  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (1082044h)]  
01081024  mov         ecx,eax  
01081026  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (1082048h)]  
0108102C  dec         esi  
0108102D  jne         main+10h (1081010h)  
    }
    return 0; 
Run Code Online (Sandbox Code Playgroud)

您应该分析您的代码,然后优化慢速部分.不要以过早优化开始.

  • 在这种情况下,编译器发现循环中没有使用`i`,并且循环边界足够小而不会导致溢出,并将其替换为运行至零的计数器.如果你输出`i`而不是`1`,并且在编译时不知道循环边界,几乎肯定会有区别. (3认同)