SORU
27 EYLÜL 2011, Salı


GC veya GC Değil

Son zamanlarda gerçekten çok güzel ve eğitici dilleri konuşuyor gördüm:

This first one Herb Sutter, hediyeleri tüm güzel ve serin özellikleri C 0x, neden C 'ın geleceği daha parlak görünüyor her zamankinden, ve nasıl M$ olduğunu söyledi iyi adam bu oyunu. Konuşması sık sık yığın aktivite en aza indirerek performansı artırır verimlilik ve nasıl etrafında döner.

Andrei Alexandrescu tarafından This other one, motive edergeçişoyun değiştirici onun yeni C/CD. D şeylerin çoğu gerçekten iyi motive edilmiş ve tasarlanmış gibi görünüyor. Ancak bir şey daha, D, çöp toplama iter ve tüm sınıflar sadece oluşturulan bana, yani şaşırdımbaşvuruyla. Daha da kafa karıştırıcı bir kitapD Programlama Dili El Kitabı Refbu bölümde özellikle ilgiliKaynak Yönetimiaşağıda belirtilmiştir, alıntı:

Çöp toplama sıkıcı, hata eğilimli bellek ayırma izleme kodunu ortadan kaldırır C ve C Gerekli . Bu sadece çok daha hızlı geliştirme zamanı ve düşük anlamına gelir bakım maliyetleri, ama sonuçta program sık sık çalışırdaha hızlı!

Sutter ile bu çatışmalar yığın aktivite en aza indirilmesi konusunda sürekli konuşun. Ben güçlü hem de Sutter'ın ve Alexandrescou anlayışlar, biraz bu iki önemli soru hakkında karıştı hissediyorum bu yüzden saygı duyuyorum

  1. Sadece başvurusu oluşturarak sınıf örneği unnecesseary yığın aktivite bir sürü neden yok?

  2. Hangi durumlarda çalıştırma performansından ödün vermeden Çöp Toplama kullanabilir miyiz?

CEVAP
28 EYLÜL 2011, ÇARŞAMBA


Doğrudan iki sorunun cevabı:

  1. Evet, başvuru ile sınıf örneği oluşturma yığın bir sürü etkinlik var, sonuç yokama:

    bir. D struct class var. struct değer semantiği vardır ve her şeyi yapabilen bir sınıf dışında polimorfizmi.

    b. Polimorfizmi ve değer semantik asla birlikte iyi slicing problem bağlı çalıştı.

    c. D, Eğer gerçekten ihtiyacınız tahsis sınıf örneği yığını içinde bazı performans-kritik Kodu ve önemsemiyor kaybı Emanet, sen-ebilmek yapmak çok mantıksız bir zorluk olmadan) scoped fonksiyon.

  2. GC veya manuel bellek yönetimi, daha hızlı, karşılaştırılabilir olabilir:

    bir. Yine de her şey için yığın üzerinde sık sık diğer GC olur dilde gibi) güvenmek yerine mümkün olduğunca yığın genellikle D gibi) ayırmak.

    b. Bir top-of-the-line çöp toplayıcı (D geçerli GC uygulamasıdır açıkçası biraz saf olsa da bunu gördü bazı önemli iyileştirmeler son birkaç bültenleri, bu yüzden değil o kadar kötü değildi).

    c. Çoğunlukla küçük nesneleri ayırma. Eğer tahsis çoğunlukla büyük diziler ve performans biter olmak sorun olabilir değişelim birkaç bu C yığın (erişim hakkın var C malloc ve free D) ya da, eğer bir kapsamlı yaşam, başka bir ayırıcı gibi RegionAllocator. (RegionAllocator şu anda ve D standart kütüphane içinde nihai katılımının tartışıldığı için rafine ediliyor).

    d. Alan verimliliği hakkında pek umurunda değil. Eğer GC bellek ultra-düşük ayak izi tutmak için çok sık çalışacak yaparsanız, performans yaşayacaktır.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bratayley

    Bratayley

    30 Aralık 2010
  • kidrauhl

    kidrauhl

    15 Ocak 2007
  • Lamborghini

    Lamborghini

    13 Aralık 2005