Выбор наиболее подходящего целочисленного размера / диапазона для использования для переменных

stdint.h в C99 предоставляет множество вариантов для целочисленных размеров, типов и диапазонов - их так много, что я не знаю, какие выбрать!

Я знаю как использовать size_t и ptrdiff_t , когда это необходимо, и я использую типы фиксированного размера для хранения и передачи. Мой вопрос касается значений, которые будут храниться только в памяти хост-машины.

Например, структура изображения может содержать следующие элементы:

struct image {
    integer width, height; /* pixel dimensions of the image */
    integer bits_per_pixel;
    ...
};

Если ширина и высота ] никогда не будет превышать SHRT_MAX , следует ли использовать короткий или придерживаться int ? Изображение не может иметь отрицательную ширину или высоту, так что используйте беззнаковый тип? Возможно, (u) int_least16_t - правильный выбор? Что-нибудь еще?

Если bits_per_pixel никогда не превысит значение 64, используйте char , unsigned char , uint8_t , int или что-то еще?

Что бы вы использовали в этом примере и почему?

Как архитектура процессора, на которой будет выполняться код, влияет на выбор? то есть PPC или x86, 32 или 64bit.
Как устройство, на котором будет запущен код, повлияет на выбор? т.е. настольный компьютер, телефон, консоль.
Как выбор соотносится с производительностью и оптимизацией?

Мой вопрос простым языком: как выбрать, какое целое число использовать?

6
задан Rob W 17 December 2011 в 15:21
поделиться