SORU
18 Mart 2013, PAZARTESİ


Neden silmek gerekir mi[]?

Bu gibi bir işlevi var diyelim:

int main()
{
    char* str = new char[10];

    for(int i=0;i<5;i  )
    {
        //Do stuff with str
    }

    delete[] str;
    return 0;
}
  1. Neden program neyse sonuna kadar gideceğim Eğer str silmek gerekiyor? Eğer sadece çıkmak için gidiyorum eğer bir hafıza arazi tek boynuzlu at dolu gider umurumda bile olmaz, değil mi?

  2. Sadece iyi bir uygulama mı?

  3. Derin sonuçları var mı?

CEVAP
19 Mart 2013, Salı


Aslında soru gerçekten "" cevap evet, sorun değil. bu basit program, birkaç bayt önce özgür değilim sorun çıkar mı? var ise Herhangi bir modern işletim sistemi üzerinde bu çok iyi olacak. Ve program önemsiz değildir; kalp pili içine koyarak veya bu şey ile Toyota Camry fren sistemleri çalışıyor olması için gidiyoruz gibi değil. Eğer Müşteri, daha sonra ise belki de yarım yamalak iş etkiyi yapabilecek tek kişi sensin.

O zaman sorun bu sorunun cevabı önemsiz bir dava hakkında sorulan olmayan önemsiz durumlar için genelleme yapmak başlar.

Hadi yerine önemsiz olmayan bazı davalar hakkında iki soru sor.

Ve karmaşık şekillerde bellek, belki de birden fazla oran birden fazla kümeler isabet içeren ayırır kaldırır, uzun süren bir hizmeti var. Benim hizmet kapatmadan normal modda -- dosyalar, veritabanları, vb dış devlet -- sürekli kapat sağlayarak içeren karmaşık ve zaman alan bir süreç. Ben ayrılan bellek her bayt kapattım önce kaldırıldı emin olmak gerekir?

Evet, ve sana neden olduğunu söyleyeyim. Uzun süren bir servis başına gelebilecek en kötü şeylerden biri kazara bellek sızdırıyor. Hatta küçük sızıntılar zamanla büyük sızıntı ekleyebilirsiniz. Ve bellek sızıntısı bulma tespiti için standart bir yöntem kapatma zaman hiç özgür olmadan ayrılan tüm kaynakları günlüğü ayırma kümeler alet. Yanlış pozitif bir sürü kovalıyor ve hata ayıklayıcı çok vakit yoksa tabiiher zaman hafıza ücretsizeğer bunu yaparsanız, doğrusu gerekirse bile.

Kullanıcı zaten hizmeti kapatılıyor oluşabilecek bekliyornanosaniye milyarlarcaeğer sanal ayırıcısı her şey temizlenmiş olduğundan emin üzerinde fazladan bir baskı neden umurunda olsun ki? Bu büyük, karmaşık yazılım için ödediğiniz fiyatı. Ve birkaç milisaniye Eğer olabilir daha yavaş kimin umurunda servisi her zaman kapatıyorsun gibi, yine öyle değil mi?

Uzun süre çalışan, aynı hizmeti var. Eğer iç veri yapıları birine keşke bozuk olduğunu tespit ettim, eğer "hızlı başarısız". Program içinde tanımlanmamış bir devlet, büyük olasılıkla çalışan yükseltilmiş ayrıcalıklar ve gidiyorum varsayıyorum eğer seziyorum bozuk devlet, çünkü benim hizmettir aktif saldırısına düşman partiler. En güvenlisi hizmeti hemen kapatın. Saldırganlar hizmeti ayakta kalmak ve benim kullanıcılar ödün' veri daha. risk için daha müşterilerine hizmet etmeme izin tercih ederim Bu acil durum kapatma senaryoda hafızam her bayt ayrılan serbest olduğundan emin olun gerekir?

Elbette değil. İşletim sistemi sizin için ilgilenecek. Eğer yığın bozuk, saldırganların olabilirumutonların bir parçası olarak istismar bellek ücretsiz. Her milisaniye sayar. Ve neden bu binanın taktik nükleer bomba damla önce kapı kolları parlatma ve mutfak temizlik rahatsız eder mi?

Bu sorunun cevabı, "program benim çıkar önce boş bellek gerekir?" "programın ne olduğuna bağlı".

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • MarinaHD2001

    MarinaHD2001

    7 ŞUBAT 2009
  • Vsauce

    Vsauce

    30 Temmuz 2007
  • Yanko Kral

    Yanko Kral

    8 HAZİRAN 2006