Есть ли недостатки в использовании 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, несмотря на то, что по крайней мере в моих тестах это кажется медленнее. Таким образом, мораль этой истории, как справедливо подсказал Кристоф: всегда ориентируйтесь!