Darsliklar C# Xotira Manzili

C# C# Xotira Manzili

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 manzilio’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.