Задать вопрос
@artemphrog

Диапазон типов данных C++?

Диапазон некоторых типов данных зависит от архитектуры процессора и компилятора. У меня вопрос. Допустим во время написания программы у меня архитектура поддерживает 4 байта под int, и определены переменные с этим типом и значениями под 4 бита, а у пользователя моей программы архитектура процессора поддерживает только 2 байта. Может ли это вызвать ошибку программы у пользователя? Или это не так работает?
  • Вопрос задан
  • 295 просмотров
Подписаться 1 Простой 3 комментария
Решения вопроса 2
@MarkusD Куратор тега C++
все время мелю чепуху :)
Хочу порекомендовать тебе материал от разработчиков PVS-Studio относительно моделей данных в C++. Там хорошо и коротко объясняется суть твоего вопроса.
Так же тебе будет полезно изучить документацию C++, где можно изучить подробности.

Модель данных выбирается при трансляции и не может быть изменена в уже собранном бинарном коде. Абсолютно весь бинарный код опирается на значения модели данных буквально в каждый момент времени исполнения. Изменение модели данных бинарного кода потребует детального анализа как исполняемого кода, так и всех структур памяти, которыми бинарный код оперирует. Это будет эквивалентно повторной трансляции исходного кода в бинарный с иной моделью данных.

Модель данных сильно связана не только с бинарным кодом самого приложения, но и с его зависимостями от системных библиотек. Процесс с неподходящей моделью данных не сможет нормально работать с системными библиотеками просто потому что система и процесс по разному трактуют данные в памяти.

Поэтому, в общем смысле на твой вопрос ответить можно так. Если клиентская система ожидает от процесса одну модель данных, а он работает в другой, то падения процесса не миновать. В ряде случаев процесс даже не загрузится в память, т.к. загрузчик бинарного кода может по косвенным признакам определить несовместимость процесса и системы у клиента.
Ответ написан
Комментировать
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
Есть типы фиксированной битовой ширины - int32_t, например

Если их использовать, программа или не соберется, или будет работать медленнее (из-за программной эмуляции)

Если просто напишете int, в зависимости от компилятора можно получить 16 бит или 32 бита, подробности гарантий на типы изложены в Стандарте языка.

При передаче уже откомпилированной программы пользователю, все размеры будут определены на этапе компиляции, так что у него программа или не заработает совсем, или будет работать как задумано.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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