9.Stack, Heap va Ko’rsatgichlar(pointers)

9.Stack, Heap va Ko’rsatgichlar(pointers)

Stack, Heap va ko’rsatgichlar Rust da juda ham muhim hisoblanadi.

Stack va Heap o’zida xotira saqlaydigan joylardan hisoblanadi. Ularning orasidagi asosiy farqlar bu:

  • Stack, Heap ga qaraganda tezroq ishlaydi lekin bu bilan Heap ni juda sekin ishlaydi ham deya olmaymiz. Lekin Stack tezroq bo’lgani uchungina uni har doim ham ishlata olmaymiz, sababi:
  • Rust har doim kompilyatsiya vaqtida yaratilayotgan o’zgaruvchining aniq hajmini bilishi kerak.Oddiy o’zgaruvchilar uchun, i32 ga o’xshash, bu narsa umuman muammo tug’dirmaydi. sababi biz ularning aniq hajmini bilamiz. i32 ning hajmi har doim 4 bayt hisoblanadi negaki 32 bit =4 bayt ga teng. Shuning uchun ham i32 stack ga joylashtiriladi.
  • Lekin ba’zida ,kompilyatsiya vaqtida, biz o’zgaruvchining hajmini bilmasligimiz ham mumkin. Lekin stack ga joylashtirishimiz uchun aniq hajmini bilishimiz kerak, shuning uchun ham biz eng birinchi bo’lib Heap ga joylashtiramiz. Heap istalgan hajm band qilishi mumkin, shuning uchun ham biz keyin ko’rsatgichni(pointer) stack ga joylashtiramiz. Sababi ko’rsatgichning aniq hajmi oldindan ma’lum lekin heap niki emas. Qachonki, bizga heap dagi ma’lumot kerak bo’ladigan bo’lsa, kompyuter oldin stack ni o’qiydi va u yeradi ko’rsatgich beradigan xotira adresiga asoslanib heap dagi ma’lumotni oladi.

Ko’rsatgichlar(pointers) boshida qiyindek tuyulishi mumkin, lekin aslida esa ular juda oddiy, ular huddi kitobdagi mundarijaga o’xshaydi. Misol uchun:

MY BOOK

TABLE OF CONTENTS

Chapter                        Page
Chapter 1: My life              1
Chapter 2: My cat               15
Chapter 3: My job               23
Chapter 4: My family            30
Chapter 5: Future plans         43

Bu yerdagi har bir “chapter”ni biz aytayotgan ko’rsatgich kabi tasavvur qilsa bo’ladi. Ularga qarab, aynan shu bo’lib qayti betda joylashganini bilsak bo’ladi.

Misol uchun tepadagi mundarijadan ko’rsak bo’ladiki, “My Life” bo’limi 1-betda joylaygan, ya’ni My Life bo’limi 1 chi betga ko’rsatadi(point qiladi).

Biz Rust da uchratadigan ko’rsatgichlar odatda “reference” deb nomlanadi.Eng muhim jihatlaridan biri shuki: reference bu ma’lum bir xotiradagi joyga ko’rsatgich hisoblanadi. Reference da biz qiymatni “foydalanish uchun qarzga olamiz” va uni egasi hisoblanmaymiz. Rust dan dasturlayotganimizda reference larning oldida “&” belgisi ham turadi.

  • let my_variable = 8 odatiy o’zgaruvchi yaradi
  • let my_reference = &my_variable bu yerda esa reference olayabmiz.

Bu yerda biz “my_reference, my_variable o’zgaruvchisiga reference sifatida bo’ladi.

Ya’ni, my_reference faqatgina my_variable dagi qiymatni qarzga olganday hisoblaymi va bu yerda my_variable hali ham qiymat egasi hisoblanaveradi.

Biz reference ga ham reference bera olamiz. Ya’ni qarz olgan o’zgaruvchidan ham boshqa bir o’zgaruvchi qarz olishi mumkin.

fn main() {
    let my_number = 15; // Bui32
    let single_reference = &my_number; //  Bu birinchi reference &i32
    let double_reference = &single_reference; // Bu esa ikkinchi reference &&i32
    let five_references = &&&&&my_number; // Bu yerda yana reference olamiz &&&&&i32
}

Misol uchun tepada biz 4 xil o’zgaruvchini ko’rishimiz mumkin va ularning har birini ma’lumot turi har xil hisoblanadi.

Categories:

Tags:

You May Also Like

Leave a Reply

Your email address will not be published. Required fields are marked *

Olivia

Carter

is a writer covering health, tech, lifestyle, and economic trends. She loves crafting engaging stories that inform and inspire readers.

Popular Posts

Explore Topics