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



Книга Урок №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++ по отдельности.

188   0  

Comments

    Ничего не найдено.