C++ Chanel: post #141 — TG.ME

Что такое и зачем нужны uint32_t , int64_t , uint8_t и тд?

Когда все начинали изучать С++ работали с разными типами данных ( char , int , std::string , bool ).Но на разных архитектурах и разные компиляторы хотят от int разное количество памяти.
Давайте рассмотрим это подробнее:

Влияние архитектуры на размер int
16-битные архитектуры:
На старых 16-битных системах тип int обычно занимал 2 байта (16 бит).

32-битные архитектуры:
На большинстве современных 32-битных систем тип int занимает 4 байта (32 бита). Это связано с тем, что 32-битные процессоры оптимально работают с данными размером 4 байта.

64-битные архитектуры:
На большинстве современных 64-битных систем тип int также занимает 4 байта (32 бита), несмотря на то, что процессоры способны работать с данными большего размера. Это сделано для обеспечения обратной совместимости и эффективности.

Мы можем сделать вывод что на разных устройствах код будет работать по разному.Но что если мы хотим чтобы наша программа работала одинаково на разных компиляторах и архитектурах?

Кроссплатформенность - способность программного обеспечения работать с несколькими аппаратными платформами или операционными системами.

Для того чтобы решить вопрос кроссплатформенности в С++ добавили Целочисленные типы фиксированной ширины.Они имеют один размер не зависимо от архитектуры.

Основные 8:
int8_t - char ( 1 байт)
int16_t - short ( 2 байта )
int32_t - int ( 4 байта )
int64_t - long long ( 8 байт )
Если добавить символ u в начале то будут unsigned типы ( которые не могут быть меньше нуля но хранят в два раза больше положительных чисел).
Все эти типы будут выделять на этапе компиляции столько битов,сколько написано в названии.
Docs
Стандартные типы
Дополнительные сведения: Стандартные типы
❤1👍1😱1
May 22, 2024 1.2K 4 3