Xotira manzili — o’zgaruvchilar kompyuter xotirasida qanday saqlanishini tushuntiradigan mavzu. C#’da xotira boshqaruvi asosan avtomatik (garbage collector orqali), biroq xotira qanday ishlashini tushunish qiymat va murojaat turlari orasidagi farqni anglashda muhim.
Xotira manzili — o’zgaruvchi saqlanadigan xotira joyining adresi. C#’da qiymat turlari stack’da, murojaat turlari esa heap’da saqlanadi.
Stack va Heap
C#’da xotira ikki qismga bo’linadi. Ularni jadvalda ko’ramiz:
| Xotira | Nima saqlanadi | Tezlik |
|---|---|---|
| Stack | qiymat turlari (int, bool) |
tez |
| Heap | murojaat turlari (obyekt, massiv) | sekinroq |
Qiymat turlari (masalan, int) to’g’ridan-to’g’ri stack’da qiymatni saqlaydi. Murojaat turlari (obyektlar) esa heap’da saqlanadi, stack’da esa faqat ularning manzili turadi.
Qiymat turlari
Qiymat turi nusxalanganda, uning qiymati ko’chiriladi — ikki mustaqil nusxa hosil bo’ladi:
using System;
int a = 10;
int b = a; // qiymat nusxalanadi
b = 20;
Console.WriteLine($"a: {a}, b: {b}");
a: 10, b: 20
b ni o’zgartirsak, a o’zgarmadi — chunki ular ikki mustaqil nusxa. Bu qiymat turlarining xususiyati.
Murojaat turlari
Murojaat turi (masalan, massiv) nusxalanganda, uning manzili ko’chiriladi — ikkovi bir obyektga ishora qiladi:
using System;
int[] x = {1, 2, 3};
int[] y = x; // manzil nusxalanadi
y[0] = 99;
Console.WriteLine($"x[0]: {x[0]}, y[0]: {y[0]}");
x[0]: 99, y[0]: 99
Diqqat: y[0] ni o’zgartirsak, x[0] ham o’zgardi — chunki x va y bir xil massivga ishora qiladi. Bu murojaat turlarining muhim xususiyati.
Garbage Collector
C#’ning katta afzalligi — garbage collector (axlat yig’uvchi). U kerak bo’lmay qolgan obyektlarni heap’dan avtomatik tozalaydi. C++’dan farqli o’laroq, C#’da xotirani qo’lda bo’shatish shart emas — bu ko’plab xatolarning oldini oladi va dasturlashni osonlashtiradi.
Xulosa
Bu bo’limda xotira tuzilishini (stack va heap), qiymat va murojaat turlarining nusxalanish farqini va garbage collector’ni ko’rib chiqdik. Bu farqni tushunish C#’da xatolarning oldini oladi. Keyingi darsda ko’rsatkichlarga o’tamiz.