უფასოა გამოყოფილი მეხსიერება?

Სარჩევი:

უფასოა გამოყოფილი მეხსიერება?
უფასოა გამოყოფილი მეხსიერება?
Anonim

მალოკ და calloc ფუნქციების გამოყენებით გამოყოფილი მეხსიერება დამოუკიდებლად არ არის გამოყოფილი. აქედან გამომდინარე, გამოიყენება უფასო მეთოდი, როდესაც ხდება დინამიური მეხსიერების განაწილება. ის მეხსიერების ფუჭების შემცირებას უწყობს ხელს მისი განთავისუფლებით.

როგორ ხდება გამოყოფილი მეხსიერება უფასო?

C-ში ბიბლიოთეკის ფუნქცია malloc გამოიყენება გროვაზე მეხსიერების ბლოკის გამოსაყოფად. პროგრამა წვდება მეხსიერების ამ ბლოკს მაჩვენებლის საშუალებით, რომელსაც malloc აბრუნებს. როდესაც მეხსიერება აღარ არის საჭირო, მაჩვენებელი გადაეცემა თავისუფალ -ს, რომელიც ანაწილებს მეხსიერებას ისე, რომ ის შეიძლება გამოყენებულ იქნას სხვა მიზნებისთვის.

რა მოხდება, თუ არ გაათავისუფლებთ გამოყოფილ მეხსიერებას?

უმეტეს შემთხვევაში, პროგრამის გასვლამდე მეხსიერების გადანაწილება უაზროა. OS მაინც დაიბრუნებს მას. უფასო შეეხება და გვერდს უსვამს მკვდარ ობიექტებს; OS არ იქნება. შედეგი: ფრთხილად იყავით „გაჟონვის დეტექტორებთან“, რომლებიც ითვლიან განაწილებებს.

ძვირია მეხსიერების გამოყოფა?

მეხსიერების დიდი ბლოკების გამოყოფისა და განთავისუფლების ღირებულების გულუბრყვილო გაზომვა დაასკვნის, რომ ეს ღირს დაახლოებით 7,5 μs თითოეული განაწილებისთვის/უფასო წყვილისთვის. თუმცა არის სამი ცალკე თითო მბაიტიანი ხარჯი დიდი გამოყოფისთვის.

შეიძლება თუ არა გამოყოფილი მეხსიერების სივრცის გადანაწილება, თუ კი, როგორ?

realloc ფუნქცია გამოყოფს, გადაანაწილებს ან ათავისუფლებს ძველი_blk-ით მითითებულ მეხსიერების ბლოკს შემდეგი წესების საფუძველზე: თუ old_blk არის NULL, მეხსიერების ახალი ბლოკი ზომის ბაიტით. არისგამოყოფილი. თუ ზომა ნულის ტოლია, თავისუფალი ფუნქცია გამოიძახება მეხსიერების გასათავისუფლებლად, რომელზეც მითითებულია old_blk.

გირჩევთ: