Другие языки программирования и технологии

С/С++ зачем нужен простой int, если есть более надежные в диапазоне short, long и long long?

Zviadi Gvalia
Zviadi Gvalia
40 015
Выделяя память под массив типа unsigned int (он же size_t) гарантирует, что такая программа не будет иметь проблем с выделением под него памяти на целевой платформе.
АС
Азат Султанов
73 978
Лучший ответ
Zviadi Gvalia Спасибо большое, вроде становиться понятнее и в какую сторону надо копать))
Чем же short надежнее int?
Юн D
Юн D
20 184
Zviadi Gvalia Ничем, но имеет преимущество, так как лишняя память не расходуется впустую))
вы оба ебанулись чтоли совсем? какое нахуй усмотрение компилятора?
@рафаэль@ . Обычное.
int на 16битных будет = 2 байтам
на 32 = 4 байтам

short - везде 2 байта, long - везде 4
Zviadi Gvalia Он имеет плавающий размер, как было сказано, в зависимости от архитектуры среды выполнения(компилятора и платформы). Поэтому любой компилятор может по разному выдать тебе размер его и будет абсолютно прав при этом, но при этом минимум и максимум равны значению short.

В стандартах это сказано, например Standart C 9899_1999 (C99), пункт "6.2.5 Types".
A ‘‘plain’’ int object has the natural size suggested by the architecture of the execution environment (large enough to contain any value in the range INT_MIN to INT_MAX as defined in the header <limits.h>).
int обычно не используют в структурах файлов для переносимости (хотя есть такие...) , но его размер равен обычно размеру регистра (были выдуманы всякие архитектуры и с другим представлением адреса, слова и т. п. Например, рядом со словом лежал знак числа, который являлся как бы частью слова) и в int можно положить адрес, но заботясь, сколько он занимает: 32 или 64 бита. (имелось в виду для представления его на экран, а так надо хранить в void*). Хотя для 16 битов надо хранить адрес по-другому.
И, кстати, обычно на процессорах есть оптимизация для работы с "родными" типами, т. е. unsigned int будет считаться быстрее, чем unsigned char и т. п.
Ну собственно, в начале всяких коротких, длинных и длинных-длинных не было.
int обеспечивает в некотором смысле кроссплатформенность. У 32 и 64 битной ос разные ограничения на некоторые значения, а поставить ограничение в, скажем, long будет выглядеть на 64 битной ос как: процессор новый, а песня старая.
Zviadi Gvalia Спасибо большое за объяснение.
int определяется компилятором и зависит от разрядности ОС
Если писать short, long, long long то их размер будет определен как 2 4 8 независимо от разрядности ОС.
т. е. int это ты даешь размер на усмотрение компилятору.

вроде так...?)
Zviadi Gvalia Да, это так.
Но в таком случае нельзя предполагать, что размер больше short, для предотвращения переполнения переменной. В таком случае по идее он просто не надежен и использует лишнюю память, в отличие от явного указания. Вот и интересно, где его использование оправдано может быть.

Похожие вопросы