16–32-битное целочисленное преобразование в зависимости от производительности - PullRequest
1 голос
/ 12 марта 2019

Я хочу загрузить 16-битные целые числа без знака из массива и использовать эти значения для 32-битных вычислений без знака в C ++. У меня есть выбор между сохранением значений в виде 16-битного массива (меньше памяти) или 32-битного массива (больше памяти).

Мой код должен быть компилируемым с обычными компиляторами C ++ и работать на максимально возможном количестве архитектур. Для многих из этих комбинаций будет сложно измерять производительность и читать код ассемблера, поэтому я прошу теоретический экзамен.

Другими словами: при каких условиях преобразование целых чисел без знака от 16 до 32 бит обычно потребляет циклы ЦП? Когда можно ожидать использования 16-битного массива с уменьшенной памятью без потери циклов ЦП?

1 Ответ

2 голосов
/ 12 марта 2019

Я думаю, что все основные архитектуры поддерживают нагрузки из памяти с расширением знака и нулевым расширением. x86, ARM и MIPS определенно имеют такие инструкции по загрузке. Старые архитектуры и примитивные микроконтроллеры, особенно 8-битные и 16-битные, могут не иметь таких инструкций и, следовательно, могут требовать нескольких инструкций для достижения того же результата. Если вы не упоминаете их, вам, вероятно, все равно. Итак, просто напишите переносимый код C / C ++ и покончите с этим.

...