ფრაგმენტაცია ასევე ხდება სისტემის მეხსიერებაში (RAM). აპლიკაციისა და სისტემური პროცესები ანაწილებენ და იყენებენ მეხსიერებას არამიმდებარე ბლოკებში, რადგან არსებული მეხსიერების რეგისტრები გამოიყენება და ხელახლა გამოიყენება.
შეიძლება რამის ფრაგმენტაცია?
მეხსიერების პეიჯინგი ქმნის შიდა ფრაგმენტაციას, რადგან მთელი გვერდის ჩარჩო გამოიყოფა იმის მიუხედავად, საჭიროა თუ არა ამდენი მეხსიერება. მეხსიერების განაწილების მარეგულირებელი წესებიდან გამომდინარე, ზოგჯერ კომპიუტერის მეხსიერების გამოყოფა ხდება იმაზე მეტი, ვიდრე საჭიროა.
რა იწვევს მეხსიერების ფრაგმენტაციას?
მეხსიერების ფრაგმენტაცია არის მაშინ, როდესაც თქვენი მეხსიერების უმეტესი ნაწილი გამოყოფილია დიდი რაოდენობით არამიმდებარე ბლოკებში, ან ნაწილებში - თქვენი მთლიანი მეხსიერების კარგი პროცენტი რჩება გამოუყენებელი, მაგრამ გამოუსადეგარი. ყველაზე ტიპიური სცენარისთვის. ეს იწვევს მეხსიერების გამონაკლისებს ან განაწილების შეცდომებს (ანუ malloc აბრუნებს null).
მეხსიერების ფრაგმენტაცია ცუდია?
ზოგადად c++ პროგრამირებაში მეხსიერების ფრაგმენტაციის პრობლემა არ არის. თქვენ ყოველთვის ხედავთ ვირტუალურ მეხსიერებას და ყოველთვის ანაწილებთ მიმდებარე ვირტუალურ მეხსიერების ნაწილებს. ერთადერთი, რაც შეგიძლიათ შეამჩნიოთ, რომ თანმიმდევრულად გამოყოფილი ნაწილაკები სულაც არ არის მეზობლად მეხსიერებაში.
როგორ ავიცილოთ თავიდან მეხსიერების ფრაგმენტაცია?
თუ შეგიძლიათ ზუსტად იმ ადგილების იზოლირება, სადაც დიდი ბლოკების გამოყოფა გაქვთ, შეგიძლიათ (Windows-ზე) პირდაპირ დარეკოთ VirtualAlloc მეხსიერების მენეჯერის ნაცვლად. ეს თავიდან აიცილებსფრაგმენტაცია ნორმალური მეხსიერების მენეჯერის ფარგლებში.