SORU
17 Mart 2009, Salı


Ne seni GERÇEKTEN't don ücretsiz sonra malloc ne olur?

Bu yaş şu an için beni rahatsız eden bir şey olmuştur.

Ayrılan her bir işaretçi ücretsiz GEREKTİĞİNİ okulda (en azından ben) öğretilir. Biraz tuhaf olsa da, bellek boşaltma değil gerçek maliyeti üzereyim. Malloc bir döngü ya da bir iş parçacığı yürütme bölümü içinde çağrıldığında gibi belli bazı durumlarda, çok önemli bir bellek sızıntısı var hiç bu kadar özgür. Ama aşağıdaki iki örnek düşünün:

Eğer kodu varsa önce bunun gibi bir şey:

int main()
  {
    char * a = (char *) malloc(1024);
    /* Do some arbitrary stuff with 'a' (no alloc functions) */
    return 0;
  }

Gerçek sonuç nedir? Benim düşüncem bu süreci sona erer ve daha sonra yığın alanı bitti zaten o yüzden zarar gelmez eksik aramak için ücretsiz (ancak, benim tanımak önemli olan bu zaten kapanması, devamlılık ve iyi bir uygulama). Bu düşünce mıyım?

İkincisi, hadi biraz kabuk gibi davranan bir program var. Kullanıcıların "aaa = 123" ve bu daha sonra kullanmak için bazı dinamik veri yapısı içinde saklanır. gibi değişkenleri bildirebilirsiniz Açıkça, bazı *ayırma fonksiyonu (hashmap, bağlantılı liste gibi bir şey) çağrıları olacak bazı çözüm kullanmak istiyorum aşikardır. Bu tür bir program, bana hiç mantıklı gelmiyor hiç ücretsiz çağrıldıktan sonra malloc çünkü bu değişkenler olmalı şu anda tüm zamanlarda programlar yürütme ve orada iyi bir yol (görebildiğim kadarıyla) uygulamak için bu statik olarak ayrılan alan. Kötü tasarım ama sadece bu sürecin bir parçası olarak ayrılan serbest bu bellek bir sürü sonu var mı? Eğer öyleyse, o zaman alternatif nedir?

Şerefe

CEVAP
17 Mart 2009, Salı


Her modern işletim sistemi ile ilgili bir program sonuçta ayrılan bellek alanını iyileşir çıkar. Tek istisna belki olabilir bir şey gibi Palm OS program nerede statik depolama ve çalışma zamanı bellek hemen hemen aynı şey, öyle değil özgür olabilir programı için daha fazla depolama. (Burada sadece tahminde bulunuyorum.)

Bu yüzden Genel olarak, zarar, ihtiyacınız olandan daha fazla veri depolama zamanı maliyeti dışında yok. Kesinlikle örnek ver, temizlenmiş olana kadar kullanılabilecek bir değişken için bellek devam etmek istiyorum.

Ancak, boş hafıza olarak iyi tarzı artık ihtiyacın yok en kısa sürede ve ücretsiz bir şey için hala etrafında programa çıkmak zorunda. Hala ihtiyacınız var olup olmadığı hakkında kullanarak, ve ne düşündüğünü bilmek bir egzersiz daha. Eğer izlemek istemezsen, bellek sızıntısı olabilir.

Diğer taraftan, benzer öğüt yakın dosyalarınızı çıkış var çok daha somut bir sonuç - eğer istemiyorsan, veri yazdın bunları değil al kızarmış, ya da eğer onlar bir geçici dosya, olmayabilirler almak silinmiş bittiğinde o zaman. Ayrıca, veritabanı işlemlerini işlemiş gereken işler ve daha sonra onlarla işiniz bittiğinde kapalı. Benzer şekilde, eğer sen kullanarak bir nesneye yönelik bir dil olarak C veya Objective C, değil özgürleştirici bir nesne ne zaman bitti anlamına yıkıcı asla denir, ve herhangi bir kaynağa sınıftır sorumlu olmayabilir almak temizledi.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Eric Anthony

    Eric Anthony

    13 AĞUSTOS 2011
  • Matthew Morrill

    Matthew Morr

    15 EKİM 2011
  • MyCyberAcademy

    MyCyberAcade

    2 EKİM 2011