Я настоятельно рекомендую использовать заголовок C99 <stdint.h>
. Он объявляет int32_t
, int64_t
, uint32_t
и uint64_t
, которые выглядят как то, что вы действительно хотите использовать.
РЕДАКТИРОВАТЬ: Как указывает Алок, int_fast32_t
, int_fast64_t
и т. Д., Вероятно, то, что вы хотите использовать. Количество битов, которое вы указываете, должно быть минимально необходимым для работы математики, т. Е. Чтобы вычисление не переворачивалось.
Оптимизация происходит из-за того, что ЦПУ не нужно тратить циклы на переупорядочение данных, заполнение начальных битов при чтении и выполнение чтения-изменения-записи при записи. По правде говоря, многие процессоры (такие как последние x86) имеют аппаратное обеспечение в ЦП, которое довольно хорошо оптимизирует этот доступ (по крайней мере, части заполнения и чтения-изменения-записи), поскольку они настолько распространены и обычно включают в себя только передачу между процессор и кеш.
Таким образом, единственное, что вам остается сделать, это убедиться, что доступы выровнены: возьмите sizeof(int_fast32_t)
или что-то еще и используйте его, чтобы убедиться, что ваши буферные указатели выровнены по этому.
Правда в том, что это может не означать такого большого улучшения (поскольку аппаратная оптимизация во время выполнения все равно оптимизирует передачу), поэтому запись чего-либо и синхронизация могут быть единственным способом убедиться в этом. Кроме того, если вы действительно помешаны на производительности, вам, возможно, придется взглянуть на SSE или AltiVec или любую другую технологию векторизации, которую использует ваш процессор, поскольку она превзойдет все, что вы можете написать, переносимо при выполнении векторной математики.