Үндсэн ялгаа – Статик ба динамик санах ойн хуваарилалт
Програмчлалын хувьд тооцооллын өгөгдлийг хадгалах шаардлагатай. Эдгээр өгөгдөл нь санах ойд хадгалагддаг. Компьютерийн програмчлалд өгөгдөл хадгалах санах ойн байршлыг хувьсагч гэж нэрлэдэг. Хувьсагч нь тодорхой өгөгдлийн төрөлтэй байна. Тиймээс санах ойг програмуудыг ажиллуулахын тулд хуваарилдаг. Санах ойг хоёр аргаар хуваарилж болно. Эдгээр нь статик санах ойн хуваарилалт ба динамик санах ойн хуваарилалт юм. Статик санах ойн хуваарилалтад санах ойг хуваарилсны дараа түүнийг өөрчлөх боломжгүй. Санах ойг дахин ашиглах боломжгүй. Гэхдээ динамик санах ойн хуваарилалтад санах ойг хуваарилсны дараа үүнийг өөрчилж болно. Статик болон динамик санах ойн хуваарилалтын гол ялгаа нь статик санах ойн хуваарилалтад санах ойг хуваарилсны дараа санах ойн хэмжээ нь динамик санах ойн хуваарилалтад тогтмол байх ба санах ойг хуваарилсны дараа санах ойн хэмжээг өөрчлөх боломжтой байдаг.
Статик санах ойн хуваарилалт гэж юу вэ?
Статик санах ойн хуваарилалтад хуваарилагдсан санах ой тогтмол байдаг. Санах ойг хуваарилсны дараа түүнийг өөрчлөх боломжгүй. Санах ойг нэмэгдүүлэх, багасгах боломжгүй. Жишээлбэл, Си хэл дээр програмист int x гэж бичвэл хувьсагч бүхэл тоон утгыг хадгалах боломжтой гэсэн үг юм. Байтын тоо нь компьютерээс хамаарна. Мөн массив байж болно. Жишээ нь: int x [5]; Энэ x нь ижил төрлийн өгөгдлийн дарааллыг хадгалах боломжтой массив юм. Энэ нь бүхэл тоон таван элементийг хадгалах боломжтой. Энэ нь таваас илүү элемент хадгалах боломжгүй. Java хэл дээр массивыг, int arr=new int[5] хэлбэрээр үүсгэж болно; 'arr' массив нь 5 бүхэл утгыг хадгалах боломжтой бөгөөд үүнээс илүүг хадгалах боломжгүй.
Зураг 01: Санах ойг хуваарилах аргууд
Статик санах ойн хуваарилалтад хувьсагчдыг хуваарилсны дараа тэдгээр нь байнгын хэвээр үлдэнэ. Анхны хуваарилалтын дараа програмист санах ойн хэмжээг өөрчлөх боломжгүй. Хэрэв програмист 10 элемент хадгалах массив хуваарилсан бол заасан хэмжээнээс илүү утгыг хадгалах боломжгүй. Хэрэв програмист эхэндээ 10 элемент багтаах массив хуваарилсан боловч зөвхөн 5 элемент шаардлагатай бол санах ойн алдагдал бий болно. Тэр санах ой хэрэггүй болсон ч санах ойг дахин ашиглах боломжгүй. Статик санах ойн хуваарилалтыг зассан боловч хэрэгжүүлэх нь энгийн бөгөөд хялбар бөгөөд бас хурдан юм.
Динамик санах ойн хуваарилалт гэж юу вэ?
Заримдаа санах ойн хэмжээг өөрчлөх шаардлагатай болдог. Тиймээс санах ойг динамикаар хуваарилах боломжтой. Өгөгдлийн элементүүдийг оруулах, устгахаас хамааран санах ойн хэмжээ нэмэгдэж, багасаж болно. Үүнийг динамик санах ойн хуваарилалт гэж нэрлэдэг.
С хэлэнд stdlib.h толгой файлд динамик санах ойг хуваарилах дөрвөн функц байдаг. Эдгээр нь calloc, malloc, realloc, үнэгүй юм. malloc() функц нь шаардлагатай хэмжээний байтыг хуваарилж, хуваарилагдсан санах ойн эхний байтыг зааж хүчингүй заагчийг буцаана. calloc() функц нь шаардлагатай хэмжээний байтыг хуваарилж, тэг болгож эхлүүлнэ. Дараа нь санах ой руу хоосон заагчийг буцаана. Free() функц нь хуваарилагдсан санах ойг дахин хуваарилахад ашиглагддаг. Мөн realloc функц нь өмнө нь хуваарилагдсан санах ойг өөрчлөх боломжтой. Санах ойг calloc эсвэл malloc ашиглан хуваарилсны дараа санах ойн хэмжээ тогтмол байх боловч realloc функцийг ашиглан тэдгээрийг нэмэгдүүлэх эсвэл багасгах боломжтой. Java-д цуглуулгуудыг динамик санах ойн хуваарилалтад ашиглаж болно.
Динамик санах ойн хуваарилалтын гол давуу тал нь санах ойг хэмнэдэг. Программист санах ойг хуваарилах эсвэл шаардлагатай бол санах ойг суллах боломжтой. Санах ойг гүйцэтгэх явцад дахин хуваарилж, шаардлагагүй үед санах ойг чөлөөлж болно. Динамик санах ойн хуваарилалт нь статик санах ойн хуваарилалтаас илүү үр дүнтэй байдаг. Нэг сул тал нь динамик санах ойн хуваарилалтыг хэрэгжүүлэхэд төвөгтэй байдаг.
Статик болон динамик санах ойн хуваарилалтын хооронд ямар төстэй зүйл байдаг вэ?
- Хоёулаа санах ой хуваарилах механизм.
- Хоёуланг нь программист гараар хийх ёстой.
Статик болон динамик санах ойн хуваарилалтын ялгаа нь юу вэ?
Статик ба динамик санах ойн хуваарилалт |
|
Статик санах ойн хуваарилалт нь санах ойг хуваарилах арга бөгөөд санах ойг хуваарилсны дараа үүнийг засдаг. | Динамик санах ой хуваарилах нь санах ойг хуваарилах арга бөгөөд санах ойг хуваарилсны дараа үүнийг өөрчлөх боломжтой. |
Өөрчлөлт | |
Статик санах ойн хуваарилалтад эхний хуваарилалтын дараа хэмжээг өөрчлөх боломжгүй. | Динамик санах ойн хуваарилалтад санах ойг зохих хэмжээгээр багасгаж эсвэл ихэсгэж болно. |
Хэрэгжүүлэлт | |
Статик санах ойн хуваарилалтыг хэрэгжүүлэхэд хялбар. | Динамик санах ойн хуваарилалтыг хэрэгжүүлэхэд төвөгтэй. |
Хурд | |
Статик санах ойд хуваарилалтын гүйцэтгэл нь динамик санах ойн хуваарилалтаас хурдан байдаг. | Динамик санах ойд хуваарилалтын гүйцэтгэл нь статик санах ойн хуваарилалтаас удаан байдаг. |
Санах ойн ашиглалт | |
Статик санах ойн хуваарилалтад ашиглагдаагүй санах ойг дахин ашиглах боломжгүй. | Динамик санах ойн хуваарилалт нь санах ойг дахин ашиглах боломжийг олгодог. Программист шаардлагатай үед илүү их санах ойг хуваарилж болно. Тэр санах ойг шаардлагатай үед суллаж чадна. |
Хураангуй – Статик ба Динамик санах ойн хуваарилалт
Програмчлалд статик санах ойн хуваарилалт ба динамик санах ойн хуваарилалт нь санах ойг хуваарилах хоёр механизм юм. Статик ба динамик санах ойн хуваарилалтын ялгаа нь статик санах ойн хуваарилалтад санах ойг хуваарилсны дараа санах ойн хэмжээг динамик санах ойн хуваарилалтад тогтмол хийдэг, санах ойг хуваарилсны дараа санах ойн хэмжээг өөрчилж болно. Программист санах ой нь програмаас хамааран статик эсвэл динамик байх эсэхийг шийдэж чадна.
Статик ба динамик санах ойн хуваарилалтын PDF файлыг татаж авах
Та энэ нийтлэлийн PDF хувилбарыг татаж аваад офлайн зорилгоор ашиглах боломжтой. PDF хувилбарыг эндээс татаж авна уу: Статик ба динамик санах ойн хуваарилалтын ялгаа