JavaRush /Курси /Java Syntax Zero /Адресація пам’яті та змінні

Адресація пам’яті та змінні

Java Syntax Zero
Рівень 2 , Лекція 7
Відкрита

1. Пристрій пам’яті

У кожного комп’ютера є оперативна пам’ять. Що ж це таке, якими властивостями вона володіє і, найголовніше, яка з цього користь?

Кожна програма (в тому числі програми, написані на Java) перед виконанням завантажується в оперативну пам’ять. В оперативній пам’яті знаходиться код програми (який виконується процесором) і дані програми (які в пам’ять розміщує сама програма).

Що ж таке оперативна пам’ять і на що вона схожа?

Уявіть собі Excel 😎 Аркуш в Excel складається з комірок, і в кожної комірки є її унікальний номер (A1, A2, ... B1, B2). Знаючи номер комірки, завжди можна записати в неї якесь значення або дістати значення, яке там зберігається. Пам’ять комп’ютера влаштована дуже схоже.

Програма і її дані під час роботи зберігаються в пам’яті. Вся пам’ять комп’ютера представлена у вигляді маленьких комірок – байтів. У кожної комірки є її унікальний номер – 0, 1, 2, 3, ... (нумерація починається з нуля). Знаючи номер комірки, ми можемо зберегти в цю комірку якісь дані. Або дістати їх звідти. В одних комірках зберігається код програми – набір команд для процесора, в інших – дані цієї програми. Номер комірки також називають адресою комірки.

Процесор вміє виконувати команди із завантаженої в пам’ять програми. Майже всі команди процесора — це щось на кшталт: взяти дані з деяких комірокзробити з ними щосьрезультат розмістити в інші комірки

Об’єднуючи сотні простих команд, ми отримуємо складні та корисні програми.

Коли в коді програми оголошується змінна, їй виділяється шматочок ще не використаної пам’яті. Зазвичай це кілька байтів. При оголошенні змінної обов’язково потрібно вказати тип інформації, яку програма буде зберігати в ній: числа, текст або інші дані. Адже не знаючи типу інформації, складно визначити, якого розміру блок пам’яті потрібно виділити під змінну.

На зорі розвитку обчислювальної техніки програми працювали просто з номерами комірок пам’яті, але потім для зручності програмістів коміркам почали давати імена. Унікальне ім’я змінної — це в першу чергу для зручності програмістів: програма під час роботи чудово справлялася б і з номерами.


2. Змінні в пам’яті

Усього в Java є 4 типи даних для зберігання цілих чисел. Це byte, short, int і long.

Тип Розмір, байт Походження імені
byte 1 Byte, бо займає один байт пам’яті
short 2 Скорочення від Short Integer
int 4 Скорочення від Integer
long 8 Скорочення від Long Integer

Також в Java є 2 дійсних типи — float і double:

Тип Розмір, байт Походження імені
float 4 Скорочення від Floating Point Number
double 8 Скорочення від Double Float

Кожного разу, коли виконання програми доходить до команди створення змінної, їй виділяється невелика область пам’яті (розмір залежить від типу змінної).

Адресою змінної вважається адреса першої комірки виділеного під неї блоку пам’яті.

Java-програмам заборонено напряму звертатися до пам’яті. Вся робота з пам’яттю відбувається тільки через Java-машину.


3. Тип String в пам’яті

Тип String може зберігати великі обсяги даних, тому це не просто тип даних, а повноцінний клас.

Самі дані типу String (текст) розміщуються в спеціальному об’єкті, під який виділяється пам’ять, а вже адреса цього об’єкта розміщується в змінній, під яку також виділяється пам’ять.

Змінна a типу int займає 4 байти і зберігає значення 1.

Змінна b типу int займає 4 байти і зберігає значення 10,555. Кому тут — це не дробова частина числа, а поділ розрядів. Дробова частина відділяється крапкою

Змінна d типу double займає 8 байтів і зберігає значення 13.001.

Змінна str типу String займає 4 байти і зберігає значення G13 — адресу першої комірки об’єкта, що містить текст.

Об’єкт типу String (що містить текст) зберігається окремим блоком пам’яті. Адреса його першої комірки зберігається в змінній str.


4. Чому у програмуванні все нумерують з нуля

Люди дуже часто дивуються, чому у програмуванні майже всюди прийнято рахувати з нуля. Справа в тому, що є дуже багато ситуацій, коли рахувати з нуля зручніше (хоча є й ситуації, коли зручніше рахувати з 1).

Найпростіша з таких ситуацій — це адресація пам’яті. Якщо вашій змінній виділили 4 байти пам’яті, і у вас є X – адреса першого байта, то які будуть адреси у всіх байтів? X+0, X+1, X+2, X+3. Ось ми вже й отримали групу байтів з індексами 0, 1, 2, 3.

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


Коментарі (15)
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ
Гаркін Рівень 14
22 грудня 2025
Граматична помилка "Кому тут" - "Кома тут"
Тимур Рівень 3
3 березня 2024
В целом понятно, но, последний, 4-й параграф нужно переделать - он ен вносит ясности, совсем. Комментарии больше помогли понять, но, скорее даже надо гуглить дополнительно.
Roma Chernesh Рівень 16
19 жовтня 2022
Щось взагалі не зрозумів приклад у кінці "чому зручніше рахувати з нуля". Так-то стаття цікава, але саме цей момент якись дивакуватий.
DmytroStepanenko Рівень 51
15 березня 2023
А що не зрозуміло? Зручніше з 0, тому що якщо до Х+0, то отримуємо відлік з 0 і це зручно, а якщо з Х+1, то не зручно, якщо ви не зрозуміли де зручність - перечитайте ще раз. Якщо прочитав 5 разів і не стало зрозуміло, то прийми як факт і забий, ось і все програмування в цілому)
Олексій Рівень 7 Expert
22 квітня 2023
Потому, что в арифметике при 1-1=0 или 5-5=0 мы получаем пустоту, ноль, а в оперативной памяти ячейка 00000000 - ноль, первый байт физически присутствует, то есть ее можно пощупать. 00000001 – второй байт и так далее. Вот по этой причине отсчет начинается с ноля (первый байт — это значение ноль 0). В противном случае необходимо было бы компьютеру каждый раз давать команду, что бы он пропускал значения первого байта и начинал отсчет со второго байта, то б то с единицы.
Roma Chernesh Рівень 16
10 травня 2023
Снобізм тих, хто зрозумів велику істинку "навіщо програмісти рахують не як усі люди, а з 0")) Це прям щось із чимось))
Anonymous #3312433 Рівень 5
11 червня 2023
Дякую, хороше пояснення.
28 серпня 2023
🤣🤣🤣👍
Ivan D. Рівень 3
15 червня 2025
Не звертайте увагу на коментарі "гостророзумних"... Тут справа в тому, що будь-який самостійний фрагмент коду повинен мати змогу працювати та бути застосованим в будь-якому місці, де може знадобитися його функціонал. Це місце та умови роботи ви заздалегідь не знаєте, тож маєте підготувати свій код до праці з будь-якого місця. У вас є код, в якому адреси позначені [0, 1, 2, 3]... Віртуальна машин розташує цей код на місце в пам'яті, де працюватиме він з місця Х - додасть автоматично ваші [0, 1, 2, 3] = отримає [Х, Х+1, Х+2, Х+3]; теж саме, коли ваш код працюватиме з місця "У" в пам'яті. не кажучи вже про місце й... Де тільки може працюввти віртуальна джава машина.
dianosauric Рівень 42
30 серпня 2022
а ще можна відразу сюди додати boolean і char, щоб тут познайомитись з усіма простими типами даних. Бо вони згадуються в наступній лекції без пояснення і не вистачає контексту
dianosauric Рівень 42
30 серпня 2022
Вітаю! Підтримую, що було б доречно до типів даних додати діапазони допустимих значень. + задачі для закріплення використання різних простих типів ;)
Pan Vitali Moroz Рівень 51
31 серпня 2022
Вітаю, мені власне хочеться зрозуміти/запамятати чому в інт 4 байти і як формується число і кількість нулів. Загалом це якась вступна частина до чогось більшого
9 лютого 2022
Добрий вечір! Було б доречно долучити до таблиці з типами даних, що тип byte зберігає цілі числа в діапазоні від -128 до 127, тип short зберігає цілі числа в діапазоні від -32,768 до 32,767, тип int зберігає цілі числа в діапазоні від -2,147,483,648 до 2,147,483,647, тип int зберігає цілі числа в діапазоні від -9,223,372,036,854,775,808 дo 9,223,372,036,854,775,807.
IvanPozdniakov Рівень 13
27 липня 2022
Поправочка ) останній тип має бути long зберігає цілі числа в діапазоні від -9,223,372,036,854,775,808 дo 9,223,372,036,854,775,807. 😏
28 серпня 2023
Я впевнений, що Андрій просто допустив опечатку)))