.NET Uzbekistan
  • .NET Uzbekistan
  • C# / .NET
    • .NET ga xush kelibsiz
    • .NET bilan bog'liq mavhumliklardan qochish
    • .NET asoslari
      • MSIL
      • Memory Management
        • Stack & Heap
      • CLR
    • Basics
      • Starter (boshlang'ich)
        • Java vs C#
        • C# Tarixi
        • Kirish
        • Visual Studio 2019
        • O'zgaruvchilar
        • Ma'lumot turlari
        • Operatorlar
        • Kalit so'zlar
        • ReadLine
        • If-else
        • Switch
        • Math sinfi
        • For sikl operatori
        • While sikl operatori
        • Do-While sikl operatori
        • Foreach sikl operatori
        • Break
        • Continue
        • Goto
        • Kommentlar
      • Essential (muhim)
        • Funksiya
        • Funksiyani qiymat orqali chaqirish
        • Funksiyada Ref kalit so'zidan foydalanish
        • Funksiyada Out parametri
        • Massiv
        • Funksiyalarda massivdan foydalanish
        • Ko'p o'lchamli massiv
        • Parametrlar
        • Array sinfi
        • CMD argumentlari
        • Obyekt va Class lar
        • Konstruktor
        • Obyektni ishga tushiruvchilar
        • Destructor
        • this
        • static
        • Struct
        • Enum
        • Property va Field lar
        • Vorislik
        • Overload (Qayta yuklash)
        • Override (Qayta yozish)
        • Base
        • Polimorfizm
        • Sealed
        • Interface
        • Modifikatorlarga ruxsat berish
        • Inkapsulatsiya
        • Abstrakt class va funksiyalar
        • String
        • StringBuilder
        • String Intern Pool
        • Exception Handling
        • try/catch
        • finally
      • Professional
        • To'plamlar
          • List
          • ArrayList
          • LinkedList
          • SortedList
          • Dictionary
          • HashTable
          • Stack
          • Queue
        • Tuple
        • ValueTuple
        • Delegatlar
          • Func delegati
          • Action delegati
          • Predicate delegati
          • Anonim metodlar
        • Hodisalar
        • Extension metodlar
        • Stream I/O
          • StreamWriter
          • StreamReader
          • MemoryStream
        • File va Directory
          • FileInfo
          • DirectoryInfo
        • MultiThread va Parallel dasturlash
        • Asinxron dasturlash
        • XML Document bilan ishlash
    • LINQ asoslari
      • Average
      • LINQ qanday ishlaydi?
      • LINQ query yozish usullari
      • IEnumerable va IQuerable
      • LINQ operatorlari
      • Select
      • SelectMany
      • Filterlash operatorlari
      • Where
      • OfType
      • Saralash operatorlari
      • OrderBy va OrderByDescending
      • ThenBy va ThenByDescending
      • Reverse
      • Miqdor operatorlari
        • All
        • Any
        • Contains
        • Min
        • Max
      • Set operatsiyasi
        • Distinct
        • Except
        • Intersect
        • Union
      • Bo'lim operatorlari
        • Take
        • TakeWhile
        • Skip
        • SkipWhile
      • Join operatorlari
        • Inner Join
        • Group Join
        • Left Join
      • Element operatsiyalari
        • ElementAt
        • First va FirstOrDefault
        • Last va LastOrDefault
        • Single va SingleOrDefault
    • ORM
      • ADO.NET
      • Dapper
      • Entity Framework
        • Entity Framework Approaches(usullar)
          • Model First Approach
          • Database First Approach
          • Code First Approach
        • Query yozish usullari(Entity Framework)
          • LINQ to SQL
          • Entity SQL
          • Native SQL
        • Entity Framework Core
    • Qo'shimcha sinflar
      • System.Text
        • Encoding
      • System
        • Int32
        • Random
        • DateTime
        • TimeSpan
      • System.Reflection
    • .NET Dasturchi
      • Clean Arxitektura
        • Clean Kod
        • Dizayn Tamoyillari
          • SOLID
            • Yagona Mas'uliyat Tamoyili(SRP)
            • Ochiq Yopiq Tamoyili(O/CP)
            • Liskovning Almashtirish Tamoyili(LSP)
            • Interfeysga ajratish tamoyili(ISP)
            • Qaramlik Inversiya Tamoyili(DIP)
          • DRY
          • KISS
          • YAGNI
        • Dizayn Patternlar
          • Factory Method
          • Abstract Factory
          • Builder
          • Prototype
          • Singleton
          • Adapter
          • Bridge
          • Composite
          • Decorator
          • Façade
          • Flyweight
          • Proxy
          • Chain of Responsibility
          • Command
          • Interpreter
          • Iterator
          • Mediator
          • Memento
          • Observer
          • State
          • Strategy
          • Visitor
          • Template Method
      • Git / Github
      • Muhim terminlar
      • Postman
      • CLI
        • CMD savodxonligi
      • API dan foydalanish
      • WCF
      • Refactor .NET application
      • Unit Test
      • TDD
      • TFS
    • Desktop Dasturlash
      • WPF (Windows Presentation Foundation)
        • WPF ga kirish
          • WPF ning ustunliklari
          • WPF da dastur
          • WPF arxitetkturasi
          • Klasslar iorarxiyasi
        • XAML
          • XAML asoslari
          • XAML orqasida kod
          • XAML xususiyatlari
          • XAML belgilash kengaytmalari
          • Biriktirilgan xususiyatlar
          • XAML da hodisalar
          • XAML da nomlar fazosi
        • WPF ilovasini tuzish
          • Komponovka
          • StackPanel
          • WrapPanel
          • DockPanel
          • Grid
          • GridSplitter
          • Umumiy o'lchamli guruhlar
          • Canvas
          • LnkCanvas
          • Komponovkaga misollar
        • Bog'liqlik xususiyatlari (Dependency property)
          • Bog'liqlik xususiyatlari
          • Bog'liqlik xususiyatlarining roli
          • Bog'liqlik xususiyatlarining aniqlanishi
          • Bog'liqlik xususiyatlarini ishlatish
        • Marshrutlangan hodisalar (Routed Events)
          • Routed Events
          • Bubble Events
          • Direct Events
          • Tunneling Events
        • Qo'shimcha ma'lumotlar
          • WPF ga kirish
          • WinForm va WPF
          • Salom WPF
          • XAML nima?
          • Hodisalar
          • WPF oynasi
          • App.xaml
          • Resurslar
          • Argument berish
          • Son va Vaqtni Formatlash
          • TextBlock elementi – Inline formatlash
          • Label elementi
          • Textbox elementi
      • WinForm (Windows Form)
        • 1-dars. Forma yaratish
        • 2-dars. Muhit bilan tanishish
        • 3-dars. Formaga komponentalar joylashtirish
        • 4-dars. Xodisa(Event)larni boshqarish
        • 5-dars. Dasturni ishga tushurish
      • UWP (Universal Windows Platform)
      • Xamarin
    • Web Dasturlash
      • ASP.NET Core asoslari
        • ASP.NET Core haqida
        • Loyihalar turlari
        • ASP.NET Core dasturlarini hosting qilish
        • Middleware tushunchasi
        • Middleware bilan amaliyot
        • Statik fayllar bilan ishlash
        • Dependency Injection
        • Developer Exception Page
      • ASP.NET Core Web API
        • Web API ga kirish
        • Swagger nima?
        • Http metodlar
        • ActionResult
        • CORs
        • Security (JWT)
        • Swagger ni sozlash
        • Filter va atributlar
        • Configuration va middleware
        • Logging
        • Mapping (AutoMapper)
        • SignalR
        • Keshlash
      • ASP.NET Core MVC
        • MVC nima?
        • ASP.NET Core MVC haqida qisqacha
        • Loyiha strukturasi
        • Controller
        • View
        • Model
        • View larni aniqlash yo'llari
        • Controller dan view ga ma'lumot uzatish
        • ViewBag va ViewData
        • Strongly typed View
        • Layout view haqida
        • ViewStart va ViewImports fayllari haqida
        • Marshrutizatsiya (routing)
        • Tag Helpers
          • Anchor Tag Helper
          • Image Tag Helper
          • Environment Tag Helper
        • Tekshiruv qoidalari (Validation rules)
      • MicroServices
    • Mobile Dasturlash
      • Xamarin.Android
      • Xamarin.IOS
      • Xamarin.Forms
    • Game Dasturlash
      • Unity Starter (boshlang'ich)
      • Unity Advanced (rivojlangan)
    • Internet of Things
    • Machine Learning
    • Telegram Bot
      • Kirish
        • Telegram bot bilan tanishuv
        • ASP.NET Core da birinchi telegram bot
      • Starter
        • Xabar turlari va xabar yuborish
          • Matnli xabarlar bilan ishlash
          • Rasm & Sticker
          • Audio & voice
          • Video & Video Note
          • Dokument fayllar
          • Polls
          • Contact , Location, Venue
          • Album(Media Group)
      • Essential
        • Reply - Markup
          • ReplyKeyboardMarkup, KeyboardButton
          • InlineKeyboardMarkup, InlineKeyboardButton
      • Advanced
        • Deployment
    • Class Library
    • Intervyu savollari
      • C# / .NET asoslari
  • Database
    • MS SQL Server
      • SQL Server sintaksisi
      • Ma'lumot turlari
      • Select
    • PostgreSQL
      • Basic
        • Kirish
        • PostgreSQL tarixi
        • Muhitni sozlash (PgAdmin)
        • Sistaksis
        • Ma'lumot turlari
        • Create Database
        • Select Database
        • Drop Database
        • Create Table
        • Drop Table
        • Scheme
        • Insert so'rovi
        • Select so'rovi
        • Operatorlar
        • Ifodalar
        • Where
        • Where
        • And va Or
        • Update so'rovi
        • Delete so'rovi
        • Like
        • Limit
        • Order By
        • With
        • Having
        • Distinct
      • Advance
        • Constraint (cheklov) lar
        • Join lar
          • Cross join
          • Inner join
          • Left join
          • Right join
          • Full join
        • Union
  • Roadmap
    • Roadmap for .NET developers
    • Roadmap for Azure developers
Powered by GitBook
On this page
  • Keling, birinchi Stack nima ekanligi haqida gaplashamiz :)
  • Global va local o‘zgaruvchi deb nima nazarda tutildi?
  • Stack’dan Stack Frame’ni Pop qilish jarayoni qanday bo‘ladi?
  • Endi navbat Heap’ga keldi)

Was this helpful?

  1. C# / .NET
  2. .NET asoslari
  3. Memory Management

Stack & Heap

Dilafruza Jo'raboyeva

PreviousMemory ManagementNextCLR

Last updated 1 year ago

Was this helpful?

Assalomu alaykum, biz hozir dasturingiz run bo‘lganda, xotira bilan bog'liq umumiy qanday jarayonlar ketishi haqida sal chuqurroq yoritib berishga harakat qilamiz.

RAM => Random access memory, biz bilgan o‘sha tezkor xotira. Dastur ishga tushganda, dasturda foydalanilgan vaqtinchalik ma’lumotlar shu qismda saqlanadi. CLR xotirani oson boshqarishi uchun, xotirani ba’zi qismlarga ajratadi:

  1. Stack - bu ma’lumotlarni LIFO ko‘rinishida saqlovchi ma’lumotlar tuzilmasi;

  2. Heap - bu xotiraning dynamic memory allocation’ga javob beradigan qismi;

  3. Native Code Instructions - bu mashina tiliga mos bo‘lgan code saqlanadigan xotiraning bir qismi;

Keling, birinchi Stack nima ekanligi haqida gaplashamiz :)

Stack => Xotiraning bu qismi asosan local o‘zgaruvchilarni saqlashga va method chaqiruvlarini boshqarishga xizmat qiladi. Unda ma’lumot qo‘shish va o‘chirish judayam tez bo‘ladi. Stack har bir method call qilinganda o‘sha method uchun mahsus Stack Frame yaratadi va bu jarayon CallStack deb ataladi.

Stack Frame o‘zi nima?

Stack Frame => Dasturning runtime’da har bitta call qilingan method’lar uchun alohida alohida bir biridan izolyatsiyalangan Stack Frame’lar yaratiladi, va method’dagi local o‘zgaruvchilar, code’ning qaysi qismi, qaysi qatori haqidagi address shu Stack Frame’da saqlanadi. Refence type’li, yoki global o‘zgaruvchi bo‘lsa, o‘zi Heap’da joylashadi va address'i shu Stack Frame'ga reference qilib qo‘yiladi. Method o‘z ishini yakunlasa, Stack Frame Stack’dan Pop qilinadi, ya’ni tozaladi.

Global va local o‘zgaruvchi deb nima nazarda tutildi?

Aynan bu Global o‘zgaruvchi deyilganda, bir necha method’larda qayta qayta ishlatilishi mumkin bo‘lgan reference va value type’ga mansub o‘zgaruvchilar nazarda tutildi. Xususan, class’ning property, field’lari, .. va hokazo.

Local o‘zgaruvchi deb esa, faqat aynan shu method’da ishlatilgan, va method o'z ishini tugatsa, uning ham yashash vaqti tugaydigan o‘zgaruvchilarga aytilgan. Value type bo‘lgan method parametr’lari, .. va hokazo.

Ya’ni, value type’ga mansub o'zgaruvchilar qayerda yaratilishiga qarab xotira tanlaydi. Unuting, "value type’li o'zgaruvchilar faqat Stack’da joylashadi" degan gapni :)

Nega value type’li o'zgaruvchilar Heap’da ham joylashishi kerak? Nega Stack’da joylashavermaydi ular?

Bir value type’ga doir bo‘lgan o‘zgaruvchi Heap’da joylashishi uchun u bir nechta method’larda bir necha marta ishlatilishi kerak bo‘ladi. Yuqorida aytganimday, Stack Frame’lar bir biridan izolyatsiyalangan bo‘ladi. Bu shuni anglatadiki, siz birinchi method’da ishlatilgan o‘zgaruvchingizni ikkinchi method’da ishlata olmaysiz. Shu sababdan global value type bo‘lgan o‘zgaruvchilar ham Heap’da saqlanadi, har qaysi Stack Frame uchun uni address’i reference qilib qo‘yiladi va bu sizga sizning Global o‘zgaruvchingizni istalgan method’ingizda, istalgan marotaba ishlatish imkonini beradi.

Stack’dan Stack Frame’ni Pop qilish jarayoni qanday bo‘ladi?

Yuqorida aytganimdek, Method o‘z ishini yakunlasa, Stack Frame’ham Stack’dan Pop qilinadi va shu bilan birgalikda, method’da ishlatilgan local va global o‘zgaruvchilar ham xotiradan tozaladi. Local o‘zgaruvchilar birdaniga Stack Frame’dan tozalanadi. Global o‘zgaruvchilar esa Heap’da saqlanib turibdi desak, bu holatda Global o‘zgaruvchini Stack Frame’dan reference’i uziladi, ya’ni qiymati null’ga tenglanadi. Heap’ni atrofini davomli ravishda aylanib yuruvchi o‘sha mashhur Garbage Collector refernce’i uzilgan ma’lumotlarni qidirib yuradi, va ularni tez-tez tozalab turadi. Agar bunday bo'lmaganda(tozalamagan taqdirida), Memory Leak(keraksiz ma’lumotlar to‘lib ketishi)ga olib kelar edi.

Local value type'ni stack'da saqlanishiga doir istisnolar:

  1. Anonim Funksiyalar

  2. Asinxron Funksiyalar, shu holatda local o‘zgaruvchimiz ham Heap’da vaqtinchalikka joylashib turadi, Stack Frame Pop bo‘lsa, GC borib, o‘zgaruvchini ham Heap'dan tozalab yuboradi.

Endi navbat Heap’ga keldi)

Heap => Xotiraning bu qismida obyektlar va reference type'ga tegishli ma'lumotlar saqlanadi, qiymati Heap'da, address’lari esa Stack’da saqlab boriladi. U address’ga reference qilib qo‘yiladi.

Lekin bu hali hammasi emas, keling sal chuqurroq yondashamiz)

Heap o‘zi nima uchun yaratilgan? Bizga Stack’ni o‘zi yetmasmidi?

Bu yerda shuni aytish joizki, Heap’ning asosiy ustunlik taraflari ma’lumotlarni betartib holatda joylashtirishi(unlimited joy), collection’larni boshidagi object’ni root reference qila olishidir.

Aytaylik, bizdagi Stack Frame’da global reference tip bo‘lgan o‘zgaruvchimiz bor, va u collection, agar uni boshqa Stack Frame’ga copy qilmoqchi bo‘lsak elementlarini bitta bitta o‘tkazib chiqishga to‘g‘ri kelar edi. Heap bor bo‘lganligi uchun shunchaki o‘sha collection’ning root reference’i ulab qo‘yiladi xolos)

Heap’ning mavzuga doir tashkil topgan qismlarini aytib o'taman:

  1. LOH => Large Object Heap(85 000 baytdan katta bo‘lgan ma’lumotli o‘zgaruvchilar saqlanadi)

  2. SOH => Small Object Heap(85 000 baytdan kichik bo‘lgan ma’lumotli o‘zgaruvchilar saqlanadi)

  3. Code Heap(0,1’lar saqlanadi :))

LOH va SOH’lar Managed Heap deya yuritiladi.

LOH’ning ichidan String pool ham o‘rin olgan hisoblanadi.

Bu safargi, Heap va Stack xotira yuzasidan olib borgan kichik chuqurlashuvimiz shulardan iborat edi, e'tiboringiz uchun rahmat)

Random access memory(RAM)
Stack'dan Stack Frame'ni pop qilish jarayoni
RAM xotirasining umumiy tuzulishi