В принципе, обычный int
должен быть "быстрым, обычным целым числом использования", тогда как long
, если он отличается, может означать "расширенный диапазон, но может быть медленнее".
То, что происходит на самом деле, сильно зависит от платформы, на которой вы работаете.
На нескольких микроконтроллерах, которые я использовал, int
- 16-битный, long
- 32-битный, и операции с long
требуют более одного инструкций процессора. На «классическом» 32-битном x86 long
и int
обычно одинаковы, поэтому разницы нет вообще. На x86_64, в зависимости от проблем переносимости, long
может быть 32 или 64 бит; что касается «количества команд для выполнения операции», они одинаковы, но увеличенный размер может иметь значение, если вам нужно читать / хранить большие массивы целых чисел в памяти (32-битные целые могут работать лучше, потому что больше помещается в кэш) (и вероятно, есть много соображений, которые вы могли бы сделать, оптимизация часто бывает нелогичной, , особенно на x86).
Итак, короткая история: не задумывайтесь над этой проблемой, если вам нужно "нормальное" целое число, которое гарантированно будет работать быстро и его диапазон в порядке для вашего приложения, просто используйте int
. Если вам нужен минимальный гарантированный размер, посмотрите на typedef
с <stdint.h>
(который, кроме того, что дает целые числа точного размера, обеспечивает также «самое быстрое целое с этим минимальным размером»).
Но, как всегда, применяется обычное правило: если у вас проблемы с производительностью, сначала профиль, затем оптимизация.