9-§. K O R SA T K IC H VA XOTIRA BILAN ISHLASH 9.1. Boshlang‘ich tushunchalar Unchalik murakkab bo im a g a n dasturlam i ishlab chiqish uchun
biz hozirgacha ko‘rgan m aium o tlar yetarli, ammo murakkab dasturlar
uchun kamlik qiladi.
Dasturchi murakkab kompyuter dasturlarini ishlab chiqishda
quyidagi m aium otlarga ham javob berishi lozim:
• m aiu m o tlar qayerda saqlanadi?
• u yerda qanday qiymatlar saqlanmoqda?
• saqlanayotgan m aium otlam ing ko ‘rinishi.
Bu masalalarga javob variantlaridan birinchisi o ‘zgaruvchilami
oddiy usulda e io n qilishni nazarda tutadi. E io n qilish b u y ru g i orqali
m aium otning tipi va nomi k o ‘rsatiladi. Kompilyator bu m a’lumot
ucluin kompyuter xotirasidan maxsus joy ajratishni ta ’minlaydi va
ichki vositalar yordamida uning manzilini nazorat qiladi.
117
K o‘rsatkichlardan foydalanishni nazarda tutuvchi ikkinchi va
riant barcha dasturchilar uchun o ‘ta m uhim ahamiyat kasb etadi.
K o ‘rsatkichlar ham o ‘zgaruvchi bo Tib, o ‘zida qandaydir qiy
matlam i emas, balki bu qiymatlaming kompyuter xotirasidagi man-
zilini saqlaydi.
K o‘rsatkichlam i k o ‘rib chiqishdan avval oddiy o ‘zgaruvchilar
manzilini aniqlashga urinib k o ‘raylik. Agar hom e o ‘zgaruvchi boTsa,
&home bu o ‘zgaruvchining kompyuter xotirasidagi manzilini
anglatadi. Quyidagi listingga e ’tibor bering:
# include int main() { int a=12; double b=1.234; c o u t « a « ” a ning manzili “« & a « ”\n c o u t « b « ” b ning manzili “« & b « ”\n return 0; x / Ushbu kod Windows XP2 operatsion tizimi uchun quyidagi
natijani ekranga uzatadi:
12 a ning manzili 0x8f7dffF4
1.234 b ning manzili 0x8f7dffec
0 ‘zgaruvchilar manzilini ekranga uzatishda cout o ‘n oltilik
sanoq sistemasini qoTlaydi, chunki kompilyator xotira manzillarini
saqlash uchun aynan shu sistemadan foydaladi. Bizning misolimizda a o ‘zgaruvchining manzili b nikiga qaraganda 4 baytga farq qiladi.
Buning sababi int tipidagi m a’lumotlami saqlash uchun xotiradan
4 bayt jo y ajratilishi bilan bogTiq. Agar xotiraga b avval yozilsa, bu
o ‘zgaruvchilaming manzillari o ‘rtasidagi farq 8 ga teng boTadi.
Chunki double tipidagi m a’lumotni saqlashga xotiradan 8 bayt joy
band qilinadi.
118
C++ dasturlash tili Pascal kabi ko‘plab tillardan shunisi bilan
farq qiladiki, kompyuter tomonidan qandaydir qarorlar dastur kodini
kompilatsiya qilish vaqtida emas, balki bajarish vaqtida, ya’ni dastur
ishlayotgan vaqtda qabul qilinadi. Qiyoslash uchun misol keltiramiz:
siz ta’til vaqtida bevosita, vaziyatdan kelib chiqqan holda ob-havo,
kayfiyat va imkoniyat kabi holatlami hisobga olib, dam olishni tashkil
qilishingiz mumkin. Bu bajarish vaqtida qabul qilinadigan qaror
bo‘ladi. Kompilatsiya vaqtida qabul qilinadigan qarorga esa hech
qanday vaziyatni e ’tiborga olmagan holda, belgilangan qat’iy grafik
asosida dam olishni misol qilib keltirish mumkin.
Bajarish vaqtida qabul qilinadigan qarorlar dastuming yuzaga
keladigan vaziyatlarga moslashuvchan bo‘lishini ta ’minlaydi. Massiv-
lar uchun xotirani taqsimlash masalasi bunga yaqqol misol bo‘lishi
mumkin. Odatda massivni e ’lon qilishda uning hajmi qat’iy belgilab
qo‘yiladi (kompilatsiya vaqti qabul qilinadigan qaror) va bu hajmni
zarurat bo‘lganda o‘zgartirish mumkin emas. Odatda, talabalar guruhi
massivi bilan ishlaganda 25 ta element yetarli hisoblanadi. Ammo
ayrim hollarda talabalar soni 15 ta yoki 30 yoki undan ham ko‘p
bo‘lishi mumkin. Bunday hollarda har ehtimolga qarshi 50 ta ele-
inentli massiv e ’lon qilish lozim bo‘ladi. Qaralayotgan vaziyatda
talablar soni 15 ta bo‘lsa, xotiraning qolgan 35 yachaykasi bo'sh
qolmoqda. Ko‘rinib turibdiki, bunday dasturlar bilan ishlaganda
xotiradan noto‘g‘ri foydalanish muammosi yuzaga keladi. Bunday
inuammolami (ya’ni xotiradan qancha kerak bo‘lsa, shuncha joy
iijratish masalasi kabi) hal qilish uchun C++ tilida qaromi dastuming
bajarilishi jarayonida qabul qilish imkoniyati nazarda tutilgan. Shun-
i lay qilib, dastur ishga tushganda, kompyuter xotirasidan ehtiyojga
ko'ra zarur hajmni band qilishga ko‘rsatma berish mumkin.
Xotiradagi ma’lumotlami qayta ishlashning yangi strategiyasiga
ko'ra, qiymatlar joylashuvi haqidagi axborot nomlangan kattalik,
i|ivmatning o‘zi esa hosila kattalik sifatida qayd qilinadi. Bunda
ma’himotlaming maxsus tipi - ko'rsatkichlardan foydalaniladi. Yuqo-
i
k
I.
i
avtib o‘tilganidek, ular qiymat saqlanayotgan xotira yacheykalari
man/illarini o‘zida saqlaydi.
119