Це визначатиметься архітектурою, яку ви використовували. На мікросхемі Zilog z80 (звичайний вбудований чіп) вони матимуть один розмір, тоді як вони можуть бути зовсім іншого розміру на чіпсеті x86. Однак самі розміри є фіксованими співвідношеннями один до одного. По суті, короткі та довгі - це не типи, але підпадають під тип int. Короткі вставки будуть на порядок меншими, ніж (звичайні) int, а довгі - на порядок вище. Так що, скажімо, ваш Int обмежений 4 байтами, короткий класифікатор обмежує його до 4 байт, хоча 2 байти також дуже поширені, а довгий класифікатор підвищує його до 8 байт, хоча він може бути меншим до 4 байт. Майте на увазі, що це також залежить від довжини слова, тому в 32-бітовій системі ви максимум до 4 байтів на інт, інакше робите довгі аналогічні звичайному. Таким чином, Короткий ≤ Int ≤ Довгий.
Однак якщо ви подовжите її ще раз, ви можете натиснути на int до наступної комірки, даючи вам 8 цілих байтів пам’яті. Це розмір слова для 64-бітових машин, тому їм не доведеться турбуватися про такі речі, а просто використовують одну клітинку для довгих вводів, що дозволяє їм бути на черговий порядок вище стандартних int, тоді як довгі довгі вставки дійсно трохи.
Щодо того, що вибрати, це зводиться до того, про що, наприклад, програмістам Java не потрібно турбуватися. "Яка ваша архітектура?" Оскільки все залежить від розміру слова пам'яті відповідної машини, ви повинні зрозуміти це наперед, перш ніж вирішити, який використовувати. Потім ви вибираєте найменший розумний розмір, щоб зберегти стільки пам’яті, скільки зможете, оскільки ця пам’ять буде виділена, використовуєте ви всі біти в ній чи ні. Таким чином, ви економите, де можете, і вибираєте шорти, коли можете, і ints, коли не можете, і якщо вам потрібно щось більше, ніж те, що ви регулярно надаєте; ви б подовжувались у міру необхідності, поки не потрапили на стелю слова. Тоді вам потрібно буде надати підпрограми великої кількості або отримати їх з бібліотеки.
Це може бути "портативною збіркою", але ви все одно повинні знати ваше обладнання.
<stdint.h>