Найти в Дзене

Типы данных: Гарантированный минимальный размер базовых типов в C++ и его определение с помощью оператора sizeof

Оглавление

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

Вполне корректно было представлять, что память это эдакий рай почтальона, в котором множество почтовых ящиков, в каждом из которых хранятся отдельные данные. Однако, это не совсем так.

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

Каждый раз когда мы работаем с типами данных, компилятор знает, сколько байтов нужно будет выделить под конкретный тип, но нам об этом никак не сообщает.

Размеры базовых типов данных

Размер типа данных — это, в сущности, его ограничение по количеству уникальных значений, которые он может принимать. Соответственно, чем больше байтов вмещает в себя минимальный размер типа, тем более широк диапазон значений, который может принять этот тип.

Стандарт С++ гарантирует программисту минимальный размер базовых типов данных:

Целочисленные типы:
  • short — минимально занимает 2 байта;
  • int — минимально занимает 2 байта;
  • long — минимально занимает 4 байта;
  • long long — минимально занимает 8 байт.
Вещественные типы данных (с плавающей точкой):
  • float — минимально занимает 4 байта;
  • double минимально занимает 8 байт;
  • long double минимально занимает 8 байт.
Логический тип данных bool занимает 1 байт.

Символьные типы:
  • char всегда — занимает 1 байт;
  • wchar_t — минимально занимает 1 байт;
  • char16_t минимально занимает 2 байта;
  • char32_t — минимально занимает 4 байта.
Обратите внимание: фактический размер базовых типов на отдельно взятом компьютере может быть другим. В особенности, это касается типа int

Определение размера типа данных на конкретном компьютере с помощью оператора sizeof

Инструментарий C++ предоставляет возможность определить базовый размер типа данных на конкретном компьютере с помощью оператора sizeof.

sizeof — это унарный оператор, принимающий входящие значения в виде переменных или типов и возвращающий их размер в байтах.

Сейчас мы посмотрим на примере простой программы, как работать с этим оператором. Перепишите в свой редактор программу со скрина, скомпилируйте и запустите.

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

На выходе, вы получите напечатанные в консоли размеры каждого базового типа данных на вашем компьютере. На моем они вот такие:

-2

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

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

Вот так:

int x{}

sizeof(x)

Если вы попробуете вычислить размер типа void — программа с такой инструкцией не будет компилироваться. Потому что тип void — означает нет типа.

Наверное вы уже поняли, что специальный символ \t, который мы использовали внутри выставляет табуляцию. Если нет, то я сказал, теперь будете знать. Когда опишу все базовые типы, мы поговорим о специальных символах.

На этой веселой ноте мы заканчиваем.

Спасибо за внимание.

Оставляйте лайки, если материал был полезен и понравился.

Оставляйте комментарии, если остались вопросы.

Подписывайтесь на канал, чтобы не пропустить выхода новых статей.