for ( i = 10 ; i-- > 0 ; )
result_array[i] = byte_array[i] & byte_mask[i];
- Возвращение назад предварительно загружает строки кэша процессора.
- Включение декремента в сравнение может сохранить некоторые инструкции.
Это будет работать для всех массивов и процессоров. Однако, если вы знаете, что ваши массивы выровнены по словам, более быстрый метод - привести к более крупному типу и выполнить те же вычисления.
Например, скажем n=16
вместо n=10
. Тогда это будет намного быстрее:
uint32_t* input32 = (uint32_t*)byte_array;
uint32_t* mask32 = (uint32_t*)byte_mask;
uint32_t* result32 = (uint32_t*)result_array;
for ( i = 4 ; i-- > 0 ; )
result32[i] = input32[i] & mask32[i];
(Конечно, вам нужен правильный тип для uint32_t
, и если n
не является степенью 2, вам нужно очистить начало и / или конец, чтобы выровнять 32-битный код.)
Вариация. Вопрос, в частности, требует размещения результатов в отдельном массиве, однако почти наверняка будет проще изменить входной массив на месте.