Овоолго санах ой
Компьютерийн шинжлэх ухаан-д Овоолго санах ой нь компьютерийн RAM-д хадгалагдаж байгаа динамик санах ойн хуваарилалтыг хэлнэ. C ба Pascal зэрэг зарим програмчлалын хэлүүдэд овоолго нь процессыг ажиллуулах тодорхойгүй зарим хувьсах хэмжигдэхүүн дэх өгөгдлийг хадгалахад ашиглах програмын процессыг урьдчилан нөөцлөсөн компьютерийн гол агуулах санах ойн талбар юм. Жишээлбэл, процесс нэг буюу хэд хэдэн хэрэглэгчийн боловсруулалтын хувьд янз бүрийн оролтыг хүлээн авч болох бөгөөд дараа нь бүх оролтын өгөгдлийг нэг дор боловсруулах боломжтой болно. Үйлдлийн систем аль хэдийн овоолсон санах ойтой байх нь хадгалах үйл явцыг илүү хялбар болгодог бөгөөд шаардлагатай үед хадгалах үйлдлийн системийг асуухаас илүү хурдан байдаг. Уг процесс нь хуваарилсан овоолгыг шаардлагатай үед овоолгын "хэсэг" (шаардлагатай нураах блок гэж нэрлэдэг) шаардах замаар шаардлагатай үед блокоо дахин ашиглах, заримдаа "хог цуглуулах" мөн ашиглагдаагүй байгаа хэсгүүдэд хаягдалгүй байхаар овоолгын боломжит орон зайг дахин зохион байгуулахыг хэлнэ.
Heap нь бухал, овоолох, юмсыг давхарлаж тавих гэж орчуулж болно.
Тодорхойлолт
[засварлах | кодоор засварлах]Овоолго нь компьютерийн санах ойн бүс ба автоматаар удирдагддаггүй бөгөөд CPU-ээр зохицуулагддаггүй. Энэ нь илүү чөлөөтэй хөвөх дурын бүс(илүү том) юм. Өгөгдлийг санах ойд хуваарилахын тулд, та С-д суурилсан malloc () эсвэл calloc () -ийг ашиглах ёстой. Санах ойг хуваарилсаны дараа чөлөөт санах ойг ашиглахаа болих хэрэгтэй болно. Хэрэв үүнийг хийхгүй бол таны програм санах ойг алдагдсан гэж үзэх болно. Энэ нь овоолгын дээрх санах ойг үлдээх болно (бусад процессуудад ашиглах боломжгүй). Бид дибаг хийх хэсэгт харах үед санах ойн алдагдлыг илрүүлэхэд туслах valgrind гэж нэрлэгддэг хэрэгсэлтэй байдаг.
Олборлолтоос ялгаатай овоолго нь хувьсагчийн хэмжээг хязгаарлахгүй (таны компьютерийн бодит физик хязгаарлалтаас гадна). Санах ойг уншиж, бичсэн байхын тулд бага зэрэг удаан байдаг.
Стек-ээс ялгаатай нь овоолгын үүсгэсэн хувьсагч нь ямар ч функцээр таны програмын хаана ч хүрч болно. Нөөцийн хувьсагчууд нь гол төлөв дэлхийн хүрээнд хамаатай.
Хэзээ овоолго санах ойг хэрэглэх вэ?
[засварлах | кодоор засварлах]Хадгалах үедээ хэзээ хэрэглэх ёстой вэ? Хэрэв та том хэмжээний санах ойг (жишээлбэл, том массив эсвэл том бүтцийг) хуваарилах хэрэгтэй бөгөөд та энэ хувьсагчийг удаан хугацааны турш (дэлхий нийтийн) адилаар хадгалах хэрэгтэй бол түүнийгээ овоолго дээр хуваарилах хэрэгтэй. Хэрэв тэдгээрийг ашиглаж байгаа функцийг л хэвийн байлгахын тулд зөвхөн жижиг хувьсагчтай харьцдаг бол стекийг ашиглах нь илүү хялбар, хурдан байх ёстой. Хэрэв массивыг динамикаар өөрчлөх боломжтой бол бүтээлүүд (өөрөөр хэлбэл шаардлагатай бол өсөх эсвэл багасгах массив) гэх мэт хувьсагчууд хэрэгтэй бол тэдгээрийг овоолон хуваарилах хэрэгтэй бөгөөд malloc (), calloc () гэх мэт динамик санах ойн хуваарилалтын функцуудыг ашиглах хэрэгтэй болно. , realloc () болон чөлөөт () санах ойг "гараар" удирдах болно.
Түүх
[засварлах | кодоор засварлах]1964 онд J. W. J. Williams овоолгын өгөгдлийн бүтэц, ялангуяа хоёртын овоолгыг танилцуулсан. Түүнчлэн овоолго нь Dijkstra's algorithm-ийн алгоритм зэрэг хэд хэдэн үр дүнтэй график алгоритмд маш чухал юм.
Санах ойн хуваарилалт
[засварлах | кодоор засварлах]Ихэнх уугуул програмын хувьд, хоёр төрлийн санах ой байдаг: стек дээр суурилсан болон овоолгод суурилсан санах ой.
Овоолго нь програмын санах ойн хуваарилалтын хэрэгцээнд зориулагдсан. Эдгээр хувьсагчийн мэдэгдэлд үндэслэн хоёр төрлийн хувьсагч байдаг, тухайлбал, хэсгийн команд хувьсагч болон жишиг хувьсагч байдаг. Хэсгийн команд хувьсагчууд нь байт, богино, int, хөвөх, boolean, char зэрэг өгөгдлийн үндсэн төрлүүд юм. Энэ нь програмын код болон стекээс өөр газар юм. С хэлбэрийн програмууд нь malloc функцуудыг ашигладаг бөгөөд овоологдож буй санах ойг хуваарилж байдаг. C ++ дээр ижил төрлийн өөрчилсөн хувилбарууд нь шинэ операторууд шинэ бөгөөд устгах санах ой дахь объектыг хуваарилах, устгахад зориулж устгах юм.
Маллок ашигласнаар шинэ, устгагдаж байх үед санах ойн алдагдлыг илрүүлэхэд хэрэгтэй классик санах ойн менежментийн сайжруулалтын давуу талыг ашиглах боломжтой болно. Шинэ болон устгагдсан операторуудын стандарт хувилбарууд нь санах ойг хуваарилах, дүгнэх үр ашигтай арга замыг бий болгодог
Овоологдон хуваарилагдсан объектын нийт хэмжээ нь зөвхөн таны системийн бэлэн виртуал санах ойгоор хязгаарлагддаг болохыг анхаарна уу.
Хийсвэр тодорхойлолт
[засварлах | кодоор засварлах]Овоолгод хамгийн өндөр (эсвэл хамгийн бага) давамгайлах элемент үргэлж эхэнд(үндсэнд) хадгалагддаг. Овоолго нь эрэмбийн бүтэц биш бөгөөд хэсэгчилсэн дараалал гэж үзэж болно. Овоолгын диаграмаас үзэхэд аль ч түвшинд, тэр ч байтугай хамт байгаа хүү нарын зангилааны хооронд ямар ч холбоо хамаарал байхгүй болно. Овоолго нь бүрэн хоёртын мод байх үед энэ нь хамгийн бага хамгийн өндөртэй - нурангитай овоологдож, цэг бүр салбар үргэлжлэн байх N урттай байдаг.
Тухайн объектыг хамгийн их (буюу хамгийн бага) нэн тэргүүнд устгах хэрэгтэй бол овоолго нь ашигтай өгөгдлийн бүтэц юм. Графикт үзүүлсэнчлэн хүү нар хоёрын хооронд шууд бус захиалга байдаггүй, дарааллын дагуу (жишээ нь, хоёртын хайлтын мод байх болно) гэсэн дараалал байхгүй. Дээр дурдсан овоолгын харилцаа зөвхөн зангилаа, тэдний эцэг, өвөг эцэг гэх мэт зүйлсэд хамаарна. Зангилааны төрөл тус бүрийн хүүнүүдийн хамгийн их тоо нь овоолгын хэлбэрээс шалтгаалан олон тооны төрлөөс хамаардаг боловч олон төрөлд хамгийн ихдээ хоёр нь хоёртын овоо байдаг юм.
Санах ойн хэрэглээ
[засварлах | кодоор засварлах]Нөөц болон ашиглагдсан санах ой Хадгалагдсан болон ашиглагдсан санах ойн хэмжээг овоолсон болон овоолгын бус.
Хуваарьт санах ой нь хуваарилагдсан санах ойн нийт хэмжээ юм.
Хуваарилагдсан санах ой нь ашигласан санах ойоос бага байж болохгүй. Хуваарилагдсан санах ойн хэмжээ JVM дотоод стратегиар тодорхойлогдоно.
Ашиглагдсан овоолсон санах ой : Устгаагүй болон устгагдсан объект Ашиглагдсан овоолгын санах ой нь амьд болон үхсэн объектуудаас бүрддэг.
Амьд объектыг аппликешнд хандах боломжтой бөгөөд хогны цуглуулгад хамаарахгүй.
Устгагдсан объектууд нь өргөдлийн маягтыг хэзээ ч ашиглах боломжгүй боловч хог цуглуулагчид цуглуулаагүй байна. Ийм объект хог хаягдлын санах ойг цуглуулж дуусах хүртэл хогийн саванд цуглуулдаг.
Санах ойн телеметрийн Ангиллын жагсаалтын харагдах байдал нь амьд болон үхсэн обьектуудыг харуулдаг. Хог хаягдал цуглуулах автоматаар автоматаар хийгдэх эсвэл харгалзах багажны товчлуурын тусламжтайгаар албадсан тохиолдолд объектын тоо багасна.