• > fanidan MUSTAQIL ISHI Qabul qildi
  • MAVZU: Xotirani Taqsimlash Usullari Inkapsulyasiya. Merosxo‘rlik. Polimorfizm. Virtual funksiyalar REJA
  • O’zbekiston respublikasi axborot texnologiyalari va




    Download 471.54 Kb.
    Pdf ko'rish
    bet1/2
    Sana10.11.2023
    Hajmi471.54 Kb.
    #96617
      1   2
    Bog'liq
    Mavzu xotirani taqsimlash usullari
    Standart tizim blokining ulagichlari, strategiya malaka oshirish, Bir va ikki bog, laboratoriya 1.2.3, Ma, Ma’lumotlarlar modeli va ularni ishlatish. Uml modellashtirish, Savollar, 57-6-85-F 22, 532-6-85-Q 22


    O’ZBEKISTON RESPUBLIKASI AXBOROT 
    TEXNOLOGIYALARI VA 
    KOMMUNIKATSIYALARINI RIVOJLANTIRISH 
    VAZIRLIGI 
    MUHAMMAD AL-XORAZMIY NOMIDAGI 
    TOSHKEKENT AXBOROT TEXNOLOGIYALARI 
    UNIVERSITETI FARG’ONA FILIALI 
    KOMPYUTER INJINIRING FAKULTETI
    KOMPYUTER ,,INJINIRING YO’NALISHI’’ 
    716-21 GURUH TALABASI 
    Aliyeva Dilnoza 
    <> fanidan 
     
     
     
    MUSTAQIL ISHI 
     
    Qabul qildi:
     
     

     
    D.Umurzaqova
    Topshirdi: D.Aliyeva 

     
    Farg’ona 2023 
     


    MAVZU: Xotirani Taqsimlash Usullari Inkapsulyasiya. Merosxo‘rlik. 
    Polimorfizm. Virtual funksiyalar
     
     
    REJA: 
    Kirish 
    1. Inkapsulyasiya. Merosxo‘rlik. Polimorfizm. Virtual funksiyalar 
    2. Xotira haqida tushuncha, Xotirani taqsimlash
    3. Xotirani taqsimlashning dinamik va static ko’rinishi
    4. Xulosa
    5. Foydalanilgan adabiyotlar 
     


    Kirish 
    Xotirani boshqarish shaklidir resurslarni boshqarish uchun qo'llaniladi kompyuter xotirasi. 
    Xotirani boshqarishning muhim talabi shundan iboratki, dasturlarga ularning talabiga binoan 
    xotira qismlarini dinamik ravishda taqsimlash va kerak bo'lmaganda uni qayta ishlatish uchun 
    bo'shatish. Bu bitta kompyuterdan ko'proq bo'lgan har qanday rivojlangan kompyuter tizimi 
    uchun juda muhimdir jarayon har qanday vaqtda bo'lishi mumkin. Xotirani boshqarish 
    samaradorligini oshiradigan bir necha usullar ishlab chiqilgan. Virtual xotira tizimlar ajratib 
    turadi xotira manzillari protsessni ajratish va hajmini oshirishga imkon beradigan haqiqiy 
    jismoniy manzillardan jarayon tomonidan foydalaniladi virtual manzil maydoni mavjud 
    miqdordan tashqari Ram foydalanish xotira yoki almashtirish ikkilamchi saqlash. Virtual xotira 
    menejerining sifati umumiy tizimga katta ta'sir ko'rsatishi mumkin ishlash.
     


    Inkapsulyatsiya (Encapsulation) 
    Encapsulation ning ma'nosi "sezgir" ma'lumotlarning foydalanuvchilardan 
    yashiringanligiga ishonch hosil qilishdir. Bunga erishish uchun quyidagilar kerak: 

    sinf o'zgaruvchilari/atributlarini private deb e'lon qilish; 

    o'zgaruvchining qiymatiga kirish va yangilash uchun ommaviy(public) 
    qilib olish va sozlash usullarini taqdim etish. 
    private o'zgaruvchilarga faqat bir sinf ichida kirish mumkinligini eslatib o’tamiz 
    (tashqi sinfda unga kirish imkoni yo'q). Biroq, agar biz ommaviy 
    olish va sozlash usullarini taqdim qilsak, ularga kirish mumkin.
    getter & setter metodlari (get(), set()) 
    get usuli o'zgaruvchining qiymatini qaytaradi va set usuli qiymatni o'rnatadi.
    Ikkalasining sintaksisi shundan iboratki, ular get bilan boshlanadi yoki set, 
    keyin o'zgaruvchining nomi, birinchi harfi katta bo'ladi. 
    Misol: 
    public class Person {
    private String name; // private = restricted access
    // Getter
    public String getName() {
    return name;
    }
    // Setter
    public void setName(String newName) {
    this.name = newName;
    }
    }
    get usuli o'zgaruvchining qiymatini qaytaradi.
    set(newName) parametrini oladi va uni name o'zgaruvchiga tayinlaydi. this 
    kalit so'z joriy obyektga murojaat qilish uchun ishlatiladi. this kalit so’zi sinf 
    o’zgaruvchisiga murojaat qilishda ishlatiladi. Sinf ichidagi metodlarning 
    o’zgaruvchilari bilan bir xil bo’lganda ham this kalit so’zi orqali chaqiriladi. 
    Biroq, name o'zgaruvchi sifatida e'lon qilinganligi sababli private, biz unga 
    ushbu sinfdan tashqaridan kira olmaymiz :
    Misol: 


    public class Main {
    public static void main(String[] args) {
    Person myObj = new Person();
    myObj.name = "John"; // error
    System.out.println(myObj.name); // error  
    }
    }
    Xatolik sodir bo’ladi
    Buning o'rniga, o'zgaruvchiga kirish va yangilash uchun getName() va 
    setName() usullaridan foydalanamiz: 
    Buning o'rniga, o'zgaruvchiga kirish va yangilash uchun getName() va 
    setName() usullaridan foydalanamiz: 
    public class Main {
    public static void main(String[] args) {
    Person myObj = new Person();
    myObj.setName("John"); // Set the value of the name variable to "John"
    System.out.println(myObj.getName());
    }
    } // Outputs "John"
    Demak, nima uchun inkapsulyatsiya degan savolga javob berib o’tamiz:

    Sinf atributlari va usullarini yaxshiroq nazorat qilish. 

    Sinf atributlari faqat o'qish uchun (agar siz faqat get usulidan 
    foydalansangiz) yoki faqat yozish uchun (faqat belgilangan usuldan 
    foydalansangiz) bo'lishi mumkin. 

    Moslashuvchan: dasturchi boshqa qismlarga ta'sir qilmasdan kodning 
    bir qismini o'zgartirishi mumkin. 

    Ma'lumotlar xavfsizligini oshirish. 
    Merosxo‘rlik (extends) 
    extends kalit so'zi sinfni kengaytiradi (klass boshqa sinfdan meros bo'lib 
    qolganligini bildiradi). 
    Dasturlashda atribut va usullarni bir sinfdan ikkinchisiga meros qilib olish 
    mumkin. Biz "meros tushunchasini" ikki toifaga birlashtiramiz: 

    subclass (child) - boshqa sinfdan meros bo'lib qolgan sinf; 

    superclass (parent) - meros qilib olingan sinf 
    Sinfdan meros olish uchun kengaytirilgan (extends) kalit so'zdan 
    foydalaniladi. 


    class Vehicle {
    protected String brand = "Ford"; // Vehicle attribute
    public void honk() { // Vehicle method
    System.out.println("Tuut, tuut!");
    }
    }
    class Car extends Vehicle {
    private String modelName = "Mustang"; // Car attribute
    public static void main(String[] args) {
    Car myCar = new Car(); // Create a myCar object
    // Call the honk() method (from the Vehicle class) on the myCar object
    myCar.honk();
    // Display the value of the brand attribute (from the Vehicle class) and the value of 
    the modelName from the Car class
    System.out.println(myCar.brand + " " + myCar.modelName);
    }
    }
    Polimorfizm 
    Polimorfizm "ko'p shakllar" degan ma'noni anglatadi va bizda bir-biri bilan 
    irsiy bog'liq bo'lgan ko'plab sinflar mavjud bo'lganda paydo bo'ladi. 
    Oldingi bobda aytib o'tganimizdek; Meros atributlar va usullarni boshqa 
    sinfdan meros qilib olish imkonini beradi. Polimorfizm bu usullardan turli 
    vazifalarni bajarish uchun foydalanadi. Bu bizga bitta harakatni turli yo'llar bilan 
    bajarishga imkon beradi. 
    Misol uchun, AnimalSound() deb nomlangan usulga ega Animal deb 
    nomlangan superklassni o'ylab ko'ring. Hayvonlarning kichik sinflari cho'chqalar, 
    mushuklar, itlar, qushlar bo'lishi mumkin va ular hayvonlarning o'ziga xos ovoziga 
    ega. 
    class Animal {
    public void animalSound() {
    System.out.println("The animal makes a sound");
    }
    }
    class Pig extends Animal {
    public void animalSound() {
    System.out.println("The pig says: wee wee");
    }
    }


    class Dog extends Animal {
    public void animalSound() {
    System.out.println("The dog says: bow wow");
    }
    }
    Endi biz Pig va Dog obyektlarini yaratishimiz va ularning ikkalasida 
    animalSound() usulini chaqirishimiz mumkin: 
    Endi biz Pig va Dog obyektlarini yaratishimiz va ularning ikkalasida 
    animalSound() usulini chaqirishimiz mumkin: 
    class Animal {
    public void animalSound() {
    System.out.println("The animal makes a sound");
    }
    }
    class Pig extends Animal {
    public void animalSound() {
    System.out.println("The pig says: wee wee");
    }
    }
    class Dog extends Animal {
    public void animalSound() {
    System.out.println("The dog says: bow wow");
    }
    }
    class Main {
    public static void main(String[] args) {
    Animal myAnimal = new Animal(); // Create a Animal object
    Animal myPig = new Pig(); // Create a Pig object
    Animal myDog = new Dog(); // Create a Dog object
    myAnimal.animalSound();
    myPig.animalSound();
    myDog.animalSound();
    }
    }
    Xotira haqida tushuncha, Xotirani taqsimlash 
    Xotirani taqsimlash - bu jarayonga (uning ko'rsatmalari va ma'lumotlari) 
    jismoniy yoki virtual xotira manzil maydonini belgilash harakati. Xotirani 
    taqsimlashning ikkita asosiy usuli statik va dinamik xotira ajratishdir. Statik xotira 


    ajratish usuli xotirani jarayonga, uni bajarishdan oldin tayinlaydi. Boshqa 
    tomondan, dinamik xotirani taqsimlash usuli xotirani jarayonga, uni bajarish 
    vaqtida tayinlaydi. Ushbu bo'limda biz xotirani taqsimlash nima ekanligini, uning 
    turlarini (statik va dinamik xotirani taqsimlash) va ularning afzalliklari va 
    kamchiliklarini muhokama qilamiz. Shunday ekan, keling, boshlaylik.
    Tarkib: Statik va dinamik xotirani ajratish Xotirani taqsimlash Xotirani 
    taqsimlash turlari Statik va dinamik xotirani taqsimlashning afzalliklari va 
    kamchiliklari Asosiy xulosalar Xotirani taqsimlash Jarayonni bajarish uchun uni 
    birinchi navbatda xotiraga joylashtirish kerak. Xotiradagi jarayonga joy ajratish 
    xotirani ajratish deyiladi. Xotirani ajratish - bu bog'lanish atamasining umumiy 
    jihati.Keling, misol yordamida bog'lanishni tushunamiz. Faraz qilaylik, dasturda 
    atributlar to'plamiga ega ob'ekt mavjud. Endi ushbu ob'ektning o'zgaruvchisi ushbu 
    atributlar to'plami uchun qiymatlarga ega bo'ladi. Ushbu qiymatlarni saqlash uchun 
    biz ushbu atributlarga ajratilgan xotiraga ega bo'lishimiz kerak. Demak, 
    o'zgaruvchining atributiga xotira manzilini belgilash akti xotirani ajratish deyiladi. 
    Va qiymatlarni o'zgaruvchining atributlariga ko'rsatish/bog'lash harakati majburiy 
    deb ataladi. Ushbu bog'lash amali dasturni bajarish jarayonida o'zgaruvchidan 
    foydalanishdan oldin bajarilishi kerak.
    Bizda xotirani ajratishning ikki turi mavjud yoki ikkita bog'lash usuli, statik 
    va dinamik bog'lanishni aytishimiz mumkin.
    Xotirani taqsimlash turlari 
    1. Statik xotirani ajratish Statik xotira ajratish kompilyator dasturni 
    kompilyatsiya qilganda va obyekt fayllarini hosil qilganda amalga oshiriladi. 
    Bog'lovchi ushbu barcha ob'ekt fayllarini birlashtiradi va bitta bajariladigan faylni 
    yaratadi. Yuklovchi ushbu bitta bajariladigan faylni bajarish uchun asosiy xotiraga 
    yuklaydi. Statik xotirani taqsimlashda jarayon uchun zarur bo'lgan ma'lumotlar 
    hajmi jarayon boshlanishidan oldin ma'lum bo'lishi kerak. Agar jarayonni amalga 


    oshirishdan oldin ma'lumotlar o'lchamlari ma'lum bo'lmasa, ularni taxmin qilish 
    kerak. Agar taxmin qilingan ma'lumotlar hajmi talab qilinganidan kattaroq bo'lsa, 
    bu xotiraning isrof bo'lishiga olib keladi. Agar taxmin qilingan o'lcham kichikroq 
    bo'lsa, bu jarayonning noto'g'ri bajarilishiga olib keladi. Statik xotirani ajratish 
    usuli jarayonni bajarish jarayonida xotirani ajratish operatsiyasini talab qilmaydi. 
    Jarayon uchun zarur bo'lgan barcha xotira ajratish operatsiyalari jarayon 
    boshlanishidan oldin amalga oshiriladi. Shunday qilib, bu jarayonning tezroq 
    bajarilishiga olib keladi.
    Statik xotira taqsimoti dinamik xotira ajratish bilan solishtirganda ko'proq 
    samaradorlikni ta'minlaydi. 
    Dinamik xotira taqsimoti 
    2. Dinamik xotira ajratish dastur bajarilayotgan vaqtda amalga oshiriladi. Bu 
    erda xotira dasturning ob'ektlari dastur ishlayotgan vaqtda birinchi marta 
    foydalanilishi kerak bo'lganda ajratiladi. Kerakli ma'lumotlarning haqiqiy hajmi ish 
    vaqtida ma'lum bo'ladi, shuning uchun u dasturga aniq xotira maydonini ajratadi va 
    shu bilan xotirani isrof qilishni kamaytiradi. Dinamik xotira taqsimoti dasturni 
    bajarish uchun moslashuvchanlikni ta'minlaydi. Chunki u dastur uchun qancha 
    xotira maydoni talab qilinishini hal qilishi mumkin. Agar dastur etarlicha katta 
    bo'lsa, unda hozirda foydalaniladigan dasturning turli qismlarida dinamik xotira 
    taqsimoti amalga oshiriladi. Bu xotira sarfini kamaytiradi va tizimning ish 
    faoliyatini yaxshilaydi. Xotirani dinamik ravishda taqsimlash tizim ustidan 
    ortiqcha yuk hosil qiladi. Ba'zi taqsimlash operatsiyalari dasturning bajarilishi 
    davomida qayta-qayta bajariladi, bu esa dasturning sekin bajarilishiga olib keladi. 
    Dinamik xotirani ajratish operatsion tizimdan maxsus yordamni talab qilmaydi. 
    Dinamik xotirani taqsimlash usulidan foydalanish uchun dasturni loyihalash 
    dasturchining zimmasida. Shunday qilib, dinamik xotira taqsimoti moslashuvchan, 
    lekin statik xotira taqsimotiga qaraganda sekinroq.
    Statik va dinamik xotira ajratishning afzalliklari 
    Statik xotirani taqsimlash


    Statik xotira taqsimoti xotirani jarayonga tayinlashning samarali usulini 
    ta'minlaydi.Barcha xotira tayinlash operatsiyalari bajarish boshlanishidan oldin 
    amalga oshiriladi. Shunday qilib, dasturni bajarish vaqtida xotirani taqsimlash 
    operatsiyalari uchun qo'shimcha xarajatlar yo'q.
    Statik xotirani taqsimlash tezroq bajarilishini ta'minlaydi, chunki bajarilish 
    vaqtida dasturga ajratilgan xotirada vaqtni yo'qotish shart emas.
    Dinamik xotirani taqsimlash
    Dinamik xotira taqsimoti xotirani jarayonga belgilashning moslashuvchan 
    usulini ta'minlaydi. Dinamik xotira taqsimoti xotira sarfini kamaytiradi, chunki u 
    ushbu dasturni bajarish jarayonida jarayonga xotirani tayinlaydi. Shunday qilib, u 
    dastur tomonidan talab qilinadigan aniq xotira hajmidan xabardor. Agar dastur 
    katta bo'lsa, dinamik xotira ajratish dasturning turli qismlarida amalga oshiriladi. 
    Xotira dasturning hozirda ishlatilayotgan qismiga biriktirilgan. Bu shuningdek, 
    xotira isrofgarchiligini kamaytiradi va haqiqatan ham tizim ish faoliyatini 
    yaxshilaydi.
    Statik va dinamik xotira ajratishning kamchiliklari
    Statik xotirani taqsimlash
    Statik xotirani taqsimlashda tizim dasturning xotira talabini bilmaydi. 
    Shunday qilib, u dastur uchun zarur bo'lgan xotirani taxmin qilishi kerak. Statik 
    xotira taqsimoti xotirani yo'qotishga olib keladi. Chunki u dastur tomonidan talab 
    qilinadigan xotira hajmini taxmin qiladi. Shunday qilib, agar taxminiy o'lcham 
    kattaroq bo'lsa, bu xotirani yo'qotishga olib keladi, aks holda taxminiy o'lcham 
    kichikroq bo'lsa, dastur noto'g'ri ishlaydi.
    Dinamik xotirani taqsimlash
    Dinamik xotirani taqsimlash usuli xotirani jarayonga uni bajarish vaqtida 
    tayinlash uchun qo'shimcha xarajatlarga ega. Ba'zan dasturni bajarish jarayonida 
    xotirani ajratish harakatlari bir necha marta takrorlanadi, bu esa qo'shimcha 
    xarajatlarga olib keladi. Amalga oshirish vaqtida xotirani taqsimlashning 
    qo'shimcha xarajatlari ma'lum darajada bajarilishini sekinlashtiradi. Xotirani 
    ajratish dastur yoki jarayon uchun xotira manzilini belgilaydi. Xotirani 


    taqsimlashda statik xotira ajratish va dinamik xotira ajratishning ikkita usuli 
    mavjud. Statik xotirani taqsimlash samaradorlikni ta'minlaydi, chunki u xotirani 
    bajarilishi boshlanishidan oldin jarayonga tayinlaydi. Shunday qilib, dasturni 
    bajarish paytida xotirani ajratish operatsiyasi uchun ortiqcha yuk yo'q, bu 
    dasturning tezroq bajarilishiga olib keladi. Statik xotirani ajratishda kerakli xotira 
    hajmi dastur bajarilishidan oldin ma'lum bo'lishi kerak. Statik xotira ajratish 
    jarayonga taxminiy xotira maydonini belgilaydi, chunki u dastur tomonidan talab 
    qilinadigan xotira hajmini bilmaydi. Bu xotirani behuda sarflashga olib keladi. 
    Dinamik xotirani ajratish dasturni bajarish vaqtida amalga oshiriladi. Shunday 
    qilib, u xotirani isrof qilishdan saqlaydigan dasturga aniq xotira miqdorini ajratadi. 
    Dinamik xotira taqsimoti dasturning bajarilishini sekinlashtiradigan dasturni 
    bajarish paytida xotirani taqsimlash operatsiyasining qo'shimcha xarajatlariga ega.
    Dinamik xotira ajratish xotirani taqsimlashda moslashuvchanlikni ta'minlaydi, 
    go'yo dastur etarlicha katta bo'lsa, u dasturlarning turli qismlarida xotirani ajratish 
    operatsiyalarini bajaradi va xotirani isrof qilishni kamaytiradi. Operatsion tizim 
    samarali va moslashuvchan bajarish uchun statik va dinamik xotira ajratishning 
    eng yaxshi aralashmasini olishi mumkin.
    Dinamik xotirani boshqarish muntazam xotira ajratish va bo'sh joyni bo'shatishni 
    talab qiladi. Ushbu maqolada x otirani ajratish uchun ishlatilishi mumkin bo'lgan 
    bir nechta usullar keltirilgan. Malloc (xotirani ajratish) yoki bo'sh funksiyani 
    chaqirish, ajratilgan xotira manziliga havolaga olib keladi yoki u har safar 
    chaqirilganda boshqalar foydalanishi uchun xotirani bo'shatadi. Dinamik xotirani 
    boshqarish muntazam xotira ajratish va bo'sh joyni tozalashni talab qiladi. 
    Bo'shatilgan bo'sh joy bilan bir qatorda ishlatilgan joy bilan nima qilish kerak? 
    Keyingi malloc qo'ng'irog'i uchun qaysi manzillar/uyalardan foydalanish 
    kerakligini qanday aniqlaymiz? Xotirani boshqarishning uchta usuli mavjud, biz 
    ushbu savollarni hal qilishda foydalanishimiz mumkin, biz ularni batafsil 
    muhokama qilamiz. Quyidagi jadval 1024 baytlik bitta katta xotira blokining joriy 
    holatini ko'rsatadi. Xotirani ajratish uchun har bir usul uni qanday ishlatishini 
    ko'rib chiqamiz.


    Eslatma: Ushbu blogda biz faqat First Fit algoritmini ko'rib chiqamiz, garchi 
    bu usullarning har biri o'z foydalanish holatlariga ega. Umuman olganda, birinchi 
    moslamaga ustunlik beriladi.
    Birinchi Fit
    Birinchi moslash usulida bepul ro'yxat so'ralgan o'lchamga ega bo'lgan 
    birinchi bepul blokni topish uchun ketma-ket o'tkaziladi. Blok topilgach, quyida 
    keltirilgan ikkita amaldan biri bajariladi: Agar o'lcham so'ralgan miqdorga teng 
    bo'lsa, u bepul ro'yxatdan o'chiriladi. Aks holda, u ikki qismga bo'linadi. Bu erda 
    birinchi qism ro'yxatda qoladi va ikkinchisi ajratiladi.Ikkinchi qismni ajratishning 
    sababi shundaki, ro'yxatni yangilash operatsiyasidan faqat erkin tugun hajmini 
    o'zgartirish orqali oldini olish mumkin. Keling, 200 baytni ajratishga harakat 
    qilaylik va strukturaning qanday o'zgarishini tushunamiz.
    Ko'rinib turibdiki, xotira ikkinchi bo'limda ajratilgan, oldingi blok birinchi 
    qismga ishora qiladi. Agar birinchi qism ishlatilgan bo'lsa, ikkinchi bo'limga ishora 
    qilib, o'zgartirish ro'yxatda amalga oshirilishi kerak edi. Endi algoritmni ko'rib 
    chiqamiz:
    p = freeblock;
    alloc = null; // pointer to store the allocated size n’s address
    q = null;
    // find the free node which can allocate the given size n
    while ( p != null && size(p) < n) {
    q = p; // previous node
    p = next(p);
    }
    // if there is block large enough found
    if ( p != null ) {
    s = size(p);
    alloc = p + s – n; // alloc contains the address of the desired block
    // if the block size matches the requested size, remove the block from the free list
    if ( s == n) {


    // if the match is found in the first block update the pointer of freeblock to point the 
    next of free block
    if ( q == null ) {
    freeblock = next(p);
    } else {
    next(q) = next(p); }
    } else {
    size(p) = s – n; // adjust the size of the remaining free block
    }
    Hajmi belgilangan “n” o‘lchamidan kattaroq yoki unga teng bo‘lgan bepul 
    bloklarning eng kichigi Best Fit yondashuvida tanlanadi. Eng yaxshi moslikni 
    topish uchun ushbu algoritm to'liq ro'yxat bo'ylab ishlashi kerak. Keling, 200 bayt 
    ajratishga harakat qilaylik va strukturadagi o'zgarishlarni qayd etamiz: Worst Fit 
    texnikasidagi algoritm har doim eng katta bo'sh xotira blokining bir qismini 
    ajratadi. Ushbu strategiyaning g'oyasi shundan iboratki, ko'pchilik so'rovlarga 
    xizmat ko'rsatish uchun oz sonli juda katta bloklardan doimiy ravishda foydalanish 
    orqali ko'plab kichik bloklar parchalanmagan bo'lib qoladi. Keling, 200 ni 
    ajratishga harakat qilaylik va strukturaning qanday o'zgarishini ko'rib chiqaylik. 
    C++ da o‘zgaruvchilar yo 
    statik - kompilyatsiya paytida
    , yo standart 
    kutubxonadan funksiyalarni chaqirish yo‘li bilan dinamik - dasturning bajarilish 
    paytida, joylanishi mumkin. Bu usullarni ishlatishning asosiy farqi ularning 
    effektivligida va moslanuvchanligidadir. Statik joylashtirish 
    birmuncha 
    effektivroq
    ,chunki xotira ajratish dastur bajarilishidan oldin bajariladi. Ammo uning 
    moslanuvchanligi ancha pastroq, chunki bu holda biz joylashtiriladigan 
    ob’yektlarning turlari va o‘lchamlarini oldindan bilishimiz zarur.Masalan, matn 
    fayllarni 
    qatorlarning statik massivida
    , uning o‘lchamini oldindan bilish zarurligidan, 
    joylashtirish ancha qiyin. Ayniqsa, oldindan noaniq sonli elementlarni saqlash va 
    qayta ishlash bilan bog‘liq masalalar uchun xotirani dinamik taqsimlash usulidan 
    foydalanish qulay.


    Xotirani statik va dinamik taqsimlash o‘rtasidagi asosiy farq quyidagilar: 
    
    Statik ob’yektlar nomlangan o‘zgaruvchilar bilan belgilanadi. Shu sababli bunday 
    ob’yektlar ustida amallar bevosita ularning nomlarini ishlatish orqali amalga 
    oshiriladi. Dinamik ob’yektlar shaxsiy nomga ega bo‘lmaydi, ular 
    ustidagi amallar 
    bilvosita
    , ya’ni ko‘rsatkichlar yordamida bajariladi; 
    
    Statik ob’yektlar uchun xotira ajratish va bo‘shatish kompilyator tomonidan 
    avtomatik ravishda bajariladi. Dasturchining bu haqda bosh qotirishi shart 
    emas.Dinamik ob’yektlar uchun xotira ajratish va bo‘shatish butunligicha 
    dasturchining zimmasiga tushadi. Bu esa hal qilishda xatoga yo‘l qo‘yish mumkin 
    bo‘lgan murakkab masaladir.Dinamik ajratilgan xotira bilan ish ko‘rish 
    uchun new va 
    delete
     
    buyruqlaridan foydalaniladi.Shu paytgacha barcha misollarda xotirani statik ajratish 
    usulidan 
    foydalanilib kelindi. Masalan, i o‘zgaruvchini aniqlash quyidagicha bajarilar edi: 

    Download 471.54 Kb.
      1   2




    Download 471.54 Kb.
    Pdf ko'rish

    Bosh sahifa
    Aloqalar

        Bosh sahifa



    O’zbekiston respublikasi axborot texnologiyalari va

    Download 471.54 Kb.
    Pdf ko'rish