Урок №30. Размер типов данных

Как было рассказано в уроке №28, современные компьютеры организуют память в блоки, состоящие из байтов, при этом каждый блок имеет свой уникальный адрес. Для лучшего понимания, можно представить память как ряд почтовых ящиков в подъезде, куда мы можем поместить информацию и откуда можем её извлечь, а имена переменных — это просто номера этих почтовых ящиков.
Однако данная аналогия не совсем применима к программированию из-за того, что переменные могут занимать больше одного байта памяти. Это означает, что одна переменная может занимать 2, 4 или даже 8 последовательных адресов. Объем памяти, который занимает переменная, зависит от типа данных, которые она содержит. Поскольку мы обычно обращаемся к памяти по именам переменных, а не по адресам памяти, компилятор может скрывать от нас все тонкости работы с переменными различных размеров.
Знание объема памяти, который занимает определенная переменная или тип данных, имеет несколько важных причин.
Во-первых, чем больше память, тем больше данных можно сохранить. Поскольку каждый бит может быть либо 0, либо 1, то у него есть два возможных состояния.
Два бита способны принимать четыре различных состояния:

Возможностей 8 значений могут иметь 3 бита:

В общем, переменная с определенным количеством бит может принимать 2n различных значений. Например, байт, состоящий из 8 бит, может иметь 28 (256) возможных значений.
Ограничения на количество информации, которую может хранить переменная, зависят от ее размера. Следовательно, переменные с большим количеством байт могут содержать более широкий спектр значений.
Во-вторых, у компьютеров есть ограниченный объем свободной памяти. При объявлении переменной выделяется небольшая часть этой памяти, которая остается занятой до тех пор, пока переменная существует. Современные компьютеры обычно имеют достаточно памяти, и это не является проблемой при работе с небольшим количеством переменных. Однако в случае программ с большим количеством переменных (например, 100 000) разница между использованием переменных разного размера (например, 1 байт или 8 байт) может быть существенной.
Размер основных типов данных в C++
Интересно, сколько памяти занимают переменные различных типов данных? Неожиданно, но размер переменной с определенным типом данных может различаться в зависимости от компилятора и/или архитектуры компьютера!
Минимальный размер гарантируется только языком C++:

На различных компьютерах фактический размер переменных может отличаться, поэтому для определения этого используется оператор sizeof.
Оператор sizeof - это унарный оператор, который вычисляет и возвращает размер определенной переменной или определенного типа данных в байтах. Для того чтобы узнать, сколько байт занимают различные типы данных на вашем компьютере, можно скомпилировать и запустить следующую программу:
Вот вывод, который был получен на моем ПК:
bool: 1 bytes
char: 1 bytes
wchar_t: 2 bytes
char16_t: 2 bytes
char32_t: 4 bytes
short: 2 bytes
int: 4 bytes
long: 4 bytes
long long: 8 bytes
float: 4 bytes
double: 8 bytes
long double: 8 bytes
Имейте в виду, что результаты могут измениться в зависимости от вашей архитектуры или компилятора. Важно помнить, что оператор sizeof не применяется к типу void, поскольку у него нет размера.
Если вас интересует значение \t в представленном выше коде, то это специальный символ, который заменяет клавишу TAB. Мы применили его для выравнивания колонок. Подробнее об этом мы рассмотрим на будущих уроках.
Замечательно, что sizeof - это один из трех операторов в языке программирования C++, который представляет собой слово, а не символ (наряду с new и delete).
Также можно воспользоваться оператором sizeof вместе с переменными:
Результат работы программы:
x is 4 bytes
На предстоящих занятиях мы изучим каждый из основных типов данных в языке программирования C++ по отдельности.
Comments