Урок №33. Розмір типів даних

  Юрій  | 

  Оновл. 23 Кві 2020  | 

 138

Як ми вже знаємо з уроку №31, пам’ять на сучасних комп’ютерах, як правило, організована в блоки, які складаються з байтів, причому кожен блок має свою унікальну адресу. До цього моменту, пам’ять можна було порівнювати з поштовими скриньками (ті, які знаходяться в кожному під’їзді), куди ми можемо помістити інформацію і звідки ми її можемо витягти, а змінні — це всього лише номери цих поштових скриньок.

Проте, ця аналогія не зовсім підходить до програмування, так як змінні можуть займати більше 1 байту пам’яті. Отже, одна змінна може використовувати 2, 4 або навіть 8 послідовних адрес. Об’єм пам’яті, який використовує змінна, залежить від її типу даних. Так як ми, як правило, отримуємо доступ до пам’яті через імена змінних, а не через адреси пам’яті, то компілятор може приховувати від нас всі деталі роботи зі змінними різних розмірів.

Є декілька причин, чому корисно знати, скільки пам’яті займає певна змінна/тип даних.

По-перше, чим більше вона займає, тим більше інформації зможе зберігати. Так як кожен біт може містити або 0, або 1, то 1 біт може мати 2 можливих значення.

2 біти можуть мати 4 можливих значення:

біт 0 біт 1
0 0
0 1
1 0
1 1

3 біти можуть мати 8 можливих значень:

біт 0 біт 1 біт 2
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1

По суті, змінна з n-ною кількістю бітів може мати 2n можливих значень. Оскільки байт складається з 8 біт, то він може мати 28 (256) можливих значень.

Розмір змінної накладає обмеження на кількість інформації, яку вона може зберігати. Отже, змінні, які використовують більше байт, можуть зберігати більш широкий діапазон значень.

По-друге, комп’ютери мають обмежену кількість вільної пам’яті. Кожен раз, коли ми оголошуємо змінну, невелика частина цієї вільної пам’яті виділяється до тих пір, поки змінна існує. Оскільки сучасні комп’ютери мають багато пам’яті, то, в більшості випадків, це не є проблемою, особливо коли в програмі всього лише декілька змінних. Проте, для програм з великою кількістю змінних (наприклад, 100 000 змінних), різниця між використанням 1-байтових або 8-байтових змінних може бути значною.

Розмір основних типів даних в С++

Виникає питання: “Скільки пам’яті займають змінні різних типів даних?”. Ви можете здивуватися, але розмір певних типів даних залежить від компілятора і/або архітектури комп’ютера!

C++ гарантує тільки їх мінімальний розмір:

Категорія Тип Мінімальний розмір
Логічний тип даних bool 1 байт
Символьний тип даних char 1 байт
wchar_t 1 байт
char16_t 2 байта
char32_t 4 байта
Цілочисельний тип даних short 2 байта
int 2 байта
long 4 байта
long long 8 байт
Тип даних з плаваючою крапкою float 4 байта
double 8 байт
long double 8 байт

Фактичний розмір змінних може відрізнятися на різних комп’ютерах, тому для його визначення використовують оператор 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

У наступних уроках цієї глави ми розглянемо кожен з фундаментальних типів даних в С++ окремо.

Оцінити статтю:

1 Зірка2 Зірки3 Зірки4 Зірки5 Зірок (3 оцінок, середня: 5,00 з 5)
Loading...

Залишити відповідь

Ваш E-mail не буде опублікований. Обов'язкові поля відмічені *