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

  • How To Cook That

    How To Cook

    16 NİSAN 2011
  • Māris Zaharovs

    Māris Zahar

    28 Mayıs 2008
  • ravinderosahn

    ravinderosah

    20 Temmuz 2009