Это зависит от вашего конкретного процессора, много .
Например, в PowerPC вторая форма - запись через указатели символов - сталкивается с хитрой деталью реализации, называемой load-hit-store . Это сбой ЦП, который происходит, когда вы сохраняете данные в памяти, а затем снова читаете их, прежде чем хранилище будет завершено. Операция загрузки не может быть завершена до тех пор, пока хранилище не будет завершено (большинство PPC не имеют пересылки хранилища памяти), и хранилище может потребоваться много циклов, чтобы перейти из ЦП в кэш памяти.
Из-за того, как хранилище и арифметические единицы расположены в конвейере, ЦПУ придется полностью очистить конвейер до тех пор, пока хранилище не завершится: это может быть остановка из двадцати циклов или более, в течение которых ЦП остановился. В общем, запись в память и последующее чтение сразу очень плохо на этой платформе. Таким образом, в этом случае последовательные битовые сдвиги будут намного быстрее, так как все они происходят в регистрах, и не повлекут за собой остановку конвейера.
В серии Pentium ситуация может полностью измениться, потому что этот набор микросхем имеет переадресацию хранилища и архитектуру быстрого стека и относительно немного архитектурных регистров. На Core Duos и i7s он может снова повернуть вспять, потому что их конвейеры очень глубокие.
Помните: это не тот случай, когда каждый код операции занимает один цикл. Процессоры не просты, и такие вещи, как суперскалярные каналы и опасности данных могут вызвать инструкции, выполняющие много циклов, или даже много инструкций, выполняемых за цикл, в зависимости от того, как вы расположили свой код.
Все это только для того, чтобы подчеркнуть суть: такого рода оптимизация чрезвычайно специфична для конкретного компилятора и набора микросхем. Поэтому вы должны скомпилировать, протестировать и измерить.