Asosiy farq – Statik va dinamik xotira ajratish
Dasturlashda hisoblash ma'lumotlarini saqlash kerak. Ushbu ma'lumotlar xotirada saqlanadi. Kompyuter dasturlashda ma'lumotlarni saqlash uchun xotira joylari o'zgaruvchilar deb nomlanadi. O'zgaruvchilar ma'lum bir ma'lumot turiga ega. Shuning uchun xotira dasturlarni ishga tushirish uchun ajratilgan. Xotira ikki yo'l bilan taqsimlanishi mumkin. Ular statik xotira ajratish va dinamik xotira ajratish. Statik xotira ajratishda xotira ajratilgandan keyin uni o'zgartirib bo'lmaydi. Xotiradan qayta foydalanish mumkin emas. Ammo dinamik xotirani taqsimlashda xotira ajratilgandan so'ng uni o'zgartirish mumkin. Statik va dinamik xotira taqsimotining asosiy farqi shundaki, statik xotirani ajratishda xotira ajratilgandan so‘ng, xotira hajmi dinamik xotira ajratishda o‘rnatiladi, xotira ajratilgandan so‘ng xotira hajmini o‘zgartirish mumkin.
Statik xotirani taqsimlash nima?
Statik xotirani ajratishda ajratilgan xotira belgilangan. Xotira ajratilgandan so'ng uni o'zgartirib bo'lmaydi. Xotirani oshirish yoki kamaytirish mumkin emas. Misol uchun, agar C tilida dasturchi int x yozsa, bu o'zgaruvchi butun sonni saqlashi mumkinligini anglatadi. Baytlar soni kompyuterga bog'liq. Massivlar ham bo'lishi mumkin. Masalan, int x [5]; Bu x bir xil turdagi ma'lumotlar ketma-ketligini saqlashi mumkin bo'lgan massivdir. U beshta butun elementni saqlashi mumkin. U beshdan ortiq elementni saqlay olmaydi. Java tilida massiv quyidagicha yaratilishi mumkin, int arr=new int[5]; “arr” massivi 5 ta butun qiymatni saqlashi mumkin va undan ortig‘ini saqlay olmaydi.
01-rasm: Xotirani taqsimlash usullari
Statik xotira ajratishda oʻzgaruvchilar ajratilgandan soʻng ular doimiy boʻlib qoladi. Dastlabki ajratishdan so'ng dasturchi xotira hajmini o'zgartira olmaydi. Agar dasturchi 10 ta elementni saqlashi mumkin bo'lgan massivni ajratgan bo'lsa, belgilangan qiymatdan ko'proq qiymatlarni saqlash mumkin emas. Agar dasturchi dastlab 10 ta elementni sig'dira oladigan, lekin faqat 5 ta element kerak bo'lgan massivni ajratgan bo'lsa, unda xotiraning isrof bo'lishi mavjud. Bu xotira endi kerak emas, lekin xotiradan qayta foydalanish ham mumkin emas. Statik xotira taqsimoti o‘rnatildi, lekin amalga oshirish oddiy va oson va ayni paytda tez.
Dinamik xotira taqsimoti nima?
Ba'zan xotira hajmini o'zgartirish kerak bo'ladi. Shunday qilib, xotira dinamik ravishda taqsimlanishi mumkin. Ma'lumotlar elementlarini kiritish va o'chirishga qarab, xotira o'sishi yoki qisqarishi mumkin. U dinamik xotira ajratish sifatida tanilgan.
S tilida, stdlib.h sarlavha faylida, dinamik xotira ajratish uchun to'rtta funksiya mavjud. Ular calloc, malloc, realloc va bepul. Malloc() funktsiyasi baytlarning kerakli hajmini ajratadi va ajratilgan xotiraning birinchi baytini ko'rsatuvchi bo'sh ko'rsatkichni qaytaradi. calloc() funksiyasi baytlarning kerakli hajmini ajratadi va ularni nolga tenglashtiradi. Keyin xotiraga bo'sh ko'rsatkichni qaytaradi. Free() funksiyasi ajratilgan xotirani qayta taqsimlash uchun ishlatiladi. Va realloc funktsiyasi oldindan ajratilgan xotirani o'zgartirishi mumkin. Calloc yoki malloc yordamida xotira ajratilgandan so'ng, xotira hajmi o'rnatiladi, lekin realloc funksiyasi yordamida ularni oshirish yoki kamaytirish mumkin. Java-da kollektsiyalardan dinamik xotira ajratish uchun foydalanish mumkin.
Dinamik xotira ajratishning asosiy afzalligi shundaki, u xotirani tejaydi. Dasturchi xotirani ajratishi yoki kerak bo'lganda xotirani bo'shatishi mumkin. Xotirani bajarish vaqtida qayta taqsimlash mumkin va agar kerak bo'lmasa, xotirani bo'shatishi mumkin. Dinamik xotira taqsimoti statik xotira ajratishdan ham samaralidir. Kamchiliklardan biri shundaki, dinamik xotira ajratishni amalga oshirish juda murakkab.
Statik va dinamik xotirani taqsimlash oʻrtasidagi oʻxshashliklar qanday?
- Ikkalasi ham xotirani taqsimlash mexanizmlari.
- Ikkalasini ham dasturchi qoʻlda amalga oshirishi kerak.
Statik va dinamik xotira ajratish oʻrtasidagi farq nima?
Statik va dinamik xotira ajratish |
|
Statik xotira ajratish xotirani ajratish usuli boʻlib, xotira ajratilgach, u tuzatiladi. | Dinamik xotira ajratish xotirani ajratish usuli boʻlib, xotira ajratilgandan soʻng uni oʻzgartirish mumkin. |
Oʻzgartirish | |
Statik xotira ajratishda dastlabki ajratilgandan keyin oʻlchamini oʻzgartirib boʻlmaydi. | Dinamik xotira ajratishda xotirani mos ravishda kamaytirish yoki maksimallashtirish mumkin. |
Amalga keltirish | |
Statik xotirani ajratish oson. | Dinamik xotira ajratishni amalga oshirish juda murakkab. |
Tezlik | |
Statik xotirada ajratish dinamik xotira ajratishdan tezroq amalga oshiriladi. | Dinamik xotirada ajratishning bajarilishi statik xotira ajratishdan sekinroq. |
Xotiradan foydalanish | |
Statik xotira ajratishda foydalanilmagan xotirani qayta ishlatib boʻlmaydi. | Dinamik xotira ajratish xotiradan qayta foydalanish imkonini beradi. Dasturchi kerak bo'lganda ko'proq xotira ajratishi mumkin. U kerak bo'lganda xotirani bo'shatishi mumkin. |
Xulosa – Statik va dinamik xotirani ajratish
Dasturlashda Statik xotira ajratish va dinamik xotira ajratish xotirani ajratishning ikkita mexanizmidir. Statik va dinamik xotirani taqsimlash o'rtasidagi farq shundaki, statik xotira ajratishda xotira ajratilgandan so'ng, xotira hajmi dinamik xotirani taqsimlashda o'rnatiladi, xotira ajratilgandan so'ng xotira hajmini o'zgartirish mumkin. Dasturchi dasturga qarab xotira statik yoki dinamik bo'lishi kerakligini hal qilishi mumkin.
Statik va dinamik xotirani ajratish PDF formatini yuklab oling
Siz ushbu maqolaning PDF-versiyasini yuklab olishingiz va iqtibos keltirgan holda oflayn maqsadlarda foydalanishingiz mumkin. Iltimos, PDF versiyasini bu yerdan yuklab oling: Statik va dinamik xotira ajratish o'rtasidagi farq