CodeGym /Kurslar /JAVA 25 SELF /Yaddaş ünvanlanması və dəyişənlər

Yaddaş ünvanlanması və dəyişənlər

JAVA 25 SELF
Səviyyə , Dərs
Mövcuddur

1. Yaddaşın quruluşu

Hər bir kompüterin operativ yaddaşı var. Bəs bu nədir, hansı xüsusiyyətlərə malikdir və ən əsası, bundan bizə nə fayda var?

Hər bir proqram (o cümlədən Java-da yazılmış proqramlar) icradan əvvəl operativ yaddaşa yüklənir. Operativ yaddaşda proqramın kodu (prosessorun icra etdiyi) və proqramın məlumatları (proqramın yaddaşa yerləşdirdiyi) olur.

Bəs operativ yaddaş nədir və nəyə bənzəyir?

Təsəvvür edin ki, qarşınızda Excel var 😎 Excel səhifəsi xanalardan ibarətdir və hər bir xananın öz unikal nömrəsi var (A1, A2, ... B1, B2). Xananın nömrəsini bildikdə, ora hər hansı bir dəyəri yazmaq və ya orada saxlanan dəyəri oxumaq olar. Kompüter yaddaşı da oxşar şəkildə qurulub.

memory-excel

Proqram və onun məlumatları iş vaxtı yaddaşda saxlanılır. Kompüterin bütün yaddaşı kiçik xanalardan – baytlardan ibarətdir. Hər bir xananın özünə məxsus unikal nömrəsi var – 0, 1, 2, 3, ... (nömrələmə sıfırdan başlayır). Xananın nömrəsini bildikdə, həmin xanaya bəzi məlumatları yaza və ya onları oradan götürə bilərik. Bəzi xanalarda proqramın kodu – prosessor üçün əmrlər toplusu, digərlərində isə həmin proqramın məlumatları saxlanılır. Xananın nömrəsinə həm də xananın ünvanı deyilir.

Prosessor yaddaşa yüklənmiş proqramın komandalarını icra edə bilir. Demək olar ki, bütün prosessor komandaları belədir: bəzi xanalardan məlumatları götüronlarla nəsə et → nəticəni başqa xanalara yerləşdir.

Yüzlərlə sadə əmri birləşdirərək, mürəkkəb və faydalı əmrlər əldə edirik.

Proqram kodunda dəyişən elan ediləndə, onun üçün hələ istifadə olunmamış yaddaşdan bir hissə ayrılır. Adətən bu, bir neçə bayt olur. Dəyişəni elan edərkən proqramın orada saxlayacağı məlumatın tipini mütləq göstərmək lazımdır: ədədlər, mətn və ya digər məlumatlar. Çünki tip məlum olmasa, dəyişən üçün nə ölçüdə yaddaş blokunun ayrılmalı olduğu aydın olmaz.

Kompüter sahəsinin ilkin dövrlərində proqramlar sadəcə yaddaş xanasının nömrələri ilə işləyirdilər, sonradan isə proqramçıların rahatlığı üçün xanalara adlar verilməyə başladı. Dəyişənin unikal adı ilk növbədə proqramçılar üçün rahatdır: proqram iş zamanı nömrələrlə də əla işləyərdi.

2. Yaddaşda dəyişənlər

Java-da tam ədədləri saxlamaq üçün 4 əsas verilənlər tipi var. Bunlar byte, short, intlong-dur.

Tip Ölçü, bayt Adın mənşəyi
byte
1
Byte, çünki yaddaşda bir bayt yer tutur
short
2
Short Integer sözünün qısaldılması
int
4
Integer sözünün qısaldılması
long
8
Long Integer sözünün qısaldılması

Həmçinin Java-da 2 üzən nöqtəli tip var — floatdouble:

Tip Ölçü, bayt Adın mənşəyi
float
4
Floating Point Number ifadəsinin qısaldılması
double
8
Double Float sözünün qısaldılması

Hər dəfə proqram icrası dəyişən yaratma əmrinə çatanda, onun üçün kiçik bir yaddaş sahəsi ayrılır (ölçü dəyişənin tipindən asılıdır).

Vacibdir!

Dəyişənin ünvanı, ona ayrılmış yaddaş blokunun birinci xanasının ünvanı hesab olunur.

Java proqramlarına yaddaşa birbaşa müraciət etmək qadağandır. Yaddaşla bütün iş yalnız Java-maşını vasitəsilə aparılır.

3. Yaddaşda String tipi

String tipi böyük həcmli məlumatları saxlaya bilər, buna görə də bu, sadəcə verilənlər tipi deyil, tamhüquqlu bir obyektdir.

String tipinin (mətnin) öz məlumatları xüsusi obyektə yerləşdirilir ki, onun üçün yaddaş ayrılır, və həmin obyektin ünvanı ayrıca yaddaş ayrılan dəyişənə yazılır.

memory-string

  • a dəyişəni int tipindədir, 4 bayt tutur və 1 dəyərini saxlayır.
  • b dəyişəni int tipindədir, 4 bayt tutur və 10,555 dəyərini saxlayır. Vergül — bu, ədədin kəsr hissəsi deyil, rəqəmlərin qruplaşdırılmasıdır. Kəsr hissəsi nöqtə ilə ayrılır.
  • d dəyişəni double tipindədir, 8 bayt tutur və 13.001 dəyərini saxlayır.
  • str dəyişəni String tipindədir və D12 dəyərini saxlayır — mətn saxlayan obyektin birinci xanasının ünvanı.

String tipli obyekt (mətn saxlayan) ayrıca yaddaş blokunda saxlanılır. Onun birinci xanasının ünvanı str dəyişənində saxlanılır.

4. Mənimsətmə edəndə nə baş verir

Daha bir vacib məqam — mənimsətmə necə işləyir. Məsələn:

int a = 10;
int b = a;
b = 20;
System.out.println(a); // 10

Bu nümunədə yaddaşda iki xana yaradılır: biri a üçün, biri b üçün. b = a; yazanda dəyər (10) köçürülür, “qutu”nun özü yox. b-də edilən dəyişikliklər a-ya təsir etmir.

İndi oxşar vəziyyət, ancaq sətirlərlə:

String s1 = "Hello";
String s2 = s1;
s2 = s2 + " World";
System.out.println(s1); // "Hello"
System.out.println(s2); // "Hello World"

Burada s1s2 dəyişənlərinin hər ikisi dəyişiklik anına qədər eyni "Hello" sətrinə istinad edir. Lakin s2 = s2 + " World"; icra edildikdə, s2 üçün yeni "Hello World" sətri yaradılır, s1 isə əvvəlki "Hello" sətrinə baxmağa davam edir.

5. Niyə proqramlaşdırmada hər şey sıfırdan nömrələnir

İnsanlar tez-tez təəccüblənirlər ki, niyə proqramlaşdırmada demək olar hər yerdə saymağa sıfırdan başlamaq qəbul olunub. Məsələ ondadır ki, sıfırdan saymaq daha rahatdır olan çoxlu vəziyyətlər var (baxmayaraq ki, elə situasiyalar da var ki, 1-dən saymaq daha əlverişlidir).

Bir bənzətmə ilə izah edək. Tutaq ki, mağazada uzun növbədə dayanmısınız. Və kassir deyir ki, 20-ci müştəridən başlayaraq hamı ikinci kassaya keçsin. Onların nömrələri nə olacaq? 20, 21, 22, 23, ... Məntiqlidir. Bəs 20-ciyə nisbətdə? 0, 1, 2, 3, ...

Qrup “birinci elementin nömrəsi” + “miqdar” kimi verildikdə, qrup daxilində nisbi nömrələr +0, +1, +2, ... olur.

Proqramlaşdırmada da eyni. Dəyişəniniz üçün 100 bayt yaddaş ayrılıbsa və sizin X — birinci baytın ünvanınız varsa, bütün baytların ünvanları nə olacaq? X+0, X+1, X+2, ..., X+99. Beləcə, indeksləri 0, 1, 2, ..., 99 olan baytlar qrupunu aldıq.

Hər hansı verilənlər blokunun daxilində nisbi ünvandan danışanda, nömrələmə həmişə sıfırdan başlayır. Bu, sıfırdan saymağın birinci və ən çox rast gəlinən səbəbidir.

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION