SORU
28 Mayıs 2012, PAZARTESİ


Neden kodu aktif tail call optimizasyonu önlemek için denemek istiyorsunuz?

Soru Başlığı biraz garip olabilir, ama şey, bildiğim kadarıyla, hiç kuyruk çağrı optimizasyon karşı konuşan bir şey yok. Ancak, tarama sırasında açık kaynak projeleri, zaten rastladı bir kaç fonksiyonları aktif olarak durdurmaya derleyici bir yapıyor tail call optimizasyonu için örnek uygulama CFRunLoopRef dolu gibikesmek. Örneğin:

static void __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__() __attribute__((noinline));
static void __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__(CFRunLoopObserverCallBack func, CFRunLoopObserverRef observer, CFRunLoopActivity activity, void *info) {
    if (func) {
        func(observer, activity, info);
    }
    getpid(); // thwart tail-call optimization
}

Bu görünüşte neden bu kadar önemli olduğunu bilmek istiyorum, ve ben orada bir dava varnormalgeliştirici bu da akılda tutmak gerekir? Örn. tail call optimizasyonu ile ortak tuzaklar vardır?

CEVAP
28 Mayıs 2012, PAZARTESİ


Benim tahminim burada __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ hata ayıklama amacıyla yığın izleme olduğundan emin olmak için. Bu fikri destekler __attribute__((no inline)) var.

Eğer fark ederseniz, bu işlevi yalnızca başka bir işleve zaten gider sekerek, sadece hata ayıklama yardımcı olmak için böyle ayrıntılı bir isim bence hangi trambolin bir form. Bu işlev hata ayıklama sembolleri olmayabilir ve bu nedenle başka bir yerde kayıtlı olduğunu bir işlev işaretçisi erişilebilir arıyor göz önüne alındığında, özellikle yararlı olacaktır.

Dikkat edin de benzer şeyler gerçekten var gibi görünüyor ki, benzer isimli diğer fonksiyonları bir geri iz itibaren neler olduğunu görmek yardımcı olmak için. Bu Mac OS X çekirdek Kodu ve kilitlenme raporları göstermek ve örnek raporları da süreç olacağını unutmayın.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Gigawipf

    Gigawipf

    18 ŞUBAT 2010
  • Official Clouds

    Official Clo

    1 HAZİRAN 2011
  • PlayStation

    PlayStation

    16 Aralık 2005