В предыдущей статье, мы познакомились с базовыми типами данных и узнали, что организация памяти на современных компьютерах построена по блочному принципу. Каждый блок имеет свой уникальный адрес и представлен одним байтом, а каждый байт в свою очередь 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 — это унарный оператор, принимающий входящие значения в виде переменных или типов и возвращающий их размер в байтах.
Сейчас мы посмотрим на примере простой программы, как работать с этим оператором. Перепишите в свой редактор программу со скрина, скомпилируйте и запустите.
На выходе, вы получите напечатанные в консоли размеры каждого базового типа данных на вашем компьютере. На моем они вот такие:
Ваш результат в консоли может быть другим, иногда это зависит не от компьютера, а от компилятора.
Чтобы узнать размер переменной, воспользуйтесь тем же принципом, что реализован в коде выше и вставьте ее имя внутрь круглых скобок после оператора sizeof.
Вот так:
int x{}
sizeof(x)
Если вы попробуете вычислить размер типа void — программа с такой инструкцией не будет компилироваться. Потому что тип void — означает нет типа.
Наверное вы уже поняли, что специальный символ \t, который мы использовали внутри выставляет табуляцию. Если нет, то я сказал, теперь будете знать. Когда опишу все базовые типы, мы поговорим о специальных символах.
На этой веселой ноте мы заканчиваем.
Спасибо за внимание.
Оставляйте лайки, если материал был полезен и понравился.
Оставляйте комментарии, если остались вопросы.
Подписывайтесь на канал, чтобы не пропустить выхода новых статей.