Я хочу сдвинуть тип без знака (например, size_t) на неотрицательное число (двоичных) цифр/мест влево/вправо, например.
size_t x;
x << non_const_expr
в предположении, что значение non_const_expr
соответствует (unsigned) int
, а never
вызывает неопределенное поведение (его значение неотрицательно и не превышает количество цифр в x
). (Обратите внимание, что значение неизвестно во время компиляции.)
Предположим, что такой сдвиг происходит в критичной для производительности секции (например, это единственная операция в самом внутреннем цикле). Моя трилемма заключается в том, какой тип правильного операнда (тип возвращаемого значения non_consts_expr
) в идеале должен быть для самой быстрой операции сдвига:
unsigned int
кажется наиболее читаемым/интуитивно понятным)int
(насколько мне известно,int
является родным (и самым быстрым?) типом на платформе, тогда какunsigned
может быть реализован менее эффективно`)- тип LHS в операции сдвига (т.е.
size_t
в данном случае)
Имеет ли это вообще значение? Если да, то какой из них обычно дает самый быстрый код?
std::uint_fast32_t
, если вас беспокоит производительность типов unsigned int, и это должно дать вам быстрый результат. - person Jay   schedule 01.04.2014x
), а все остальное является UB, большинство (слова ласки) будут просто использовать 5 LS-битовnon_const_expr
независимо от его типа. . - person chux - Reinstate Monica   schedule 01.04.2014int
на основе 8 младших бит счета. Каждая смена занимала 1 цикл. Так что, если по дурацкому счету было 255, эта инструкция займет долго время. Таким образом, создается огромное время задержки в худшем случае для прерываний. Intel разумно использовала 4 (или 5) младших разрядов для последующих процессоров. - person chux - Reinstate Monica   schedule 01.04.2014non_const_expr
одним и тем же значением в разделе, критичном для производительности? Если это так, вызовите код, использующий фиксированный сдвиг.if (non_const_expr==5) for(i=n; i>0; i--) { foo1(); x << 5; foo2(); }
. Каким-то образом, в конце концов, я просто не вижу, чтобы оптимизация этого сдвига существенно повлияла на скорость. - person chux - Reinstate Monica   schedule 01.04.2014