Расширяя ответ Дока Брауна, разверните цикл так, чтобы вы писали три uint32_t
целых числа для каждых четырех операций чтения (uint64_t
потребует еще больших глотков, но с ними будет немного сложнее).
Чтение и запись целочисленных значений может быть проблематичным, если ваши pimg->m_data
и cvmColorImg.data
не начинаются с границы uint32_t
. Это можно сделать, поставив элемент данных int
или unsigned int
перед этими элементами данных char*
. Или вы можете использовать что-то похожее на устройство Даффа. Личные предпочтения: я бы просто принудил выравнивание. Это делает копию кода чище, проще и, возможно, быстрее. Несколько потраченных впустую байтов для заполнения - крошечная цена.
Как обычно для развернутых циклов, вам придется сделать что-то особенное для обработки конца. (Устройство Даффа обрабатывает странность с самого начала, поэтому не стоит останавливаться на устройстве Даффа.) Многие проблемы с обработкой конца цикла исчезнут, если вы добавите конец выходного буфера так, чтобы он занимал 4 * N байт. .