Есть ли недостаток в использовании char
для маленьких целых чисел в C? Есть ли какие-либо преимущества, кроме преимуществ, связанных с заполняемостью / памятью?
В частности, может ли процессор справиться с целочисленной арифметикой на char
лучше или хуже, чем на (long
/ short
) int
?
Я знаю, что это будет зависеть от процессора / системы / компилятора, но я надеюсь получить ответ в общем случае, или, по крайней мере, в общем случае для 32-битных Windows и Solaris, являющихся системами, в которых я работаю. в данный момент работаю над. Я также предполагаю, что такие проблемы, как переполнение / обтекание, уже решены.
Обновление: Visual Studio 6.0 на самом деле не имеет stdint.h
, как предложено Кристофом. Небольшой бенчмаркинг в Windows (VS 6.0, отладочная сборка, 32-разрядная версия) с несколькими стеками циклов дает int
и long
, обеспечивающие аналогичную производительность, которая примерно в два раза быстрее, чем char
. Выполнение того же теста в Linux с gcc аналогично привязывает int
и long
как похожие, и оба быстрее, чем char
, хотя разница менее выражена.
В качестве примечания я не тратил много времени на поиск, но первая реализация stdint.h
для VS 6.0, которую я нашел (через Wikipedia ) определяет uint_fast8_t
как unsigned char
, несмотря на то, что в моих тестах это, по крайней мере, показалось медленнее. Таким образом, мораль истории, как справедливо предположил Кристоф: всегда ориентир!