SORU
29 Ocak 2009, PERŞEMBE


Neden't değil .Kuyruk özyineleme çağrısı/C# NET optimize?

Kuyruk özyineleme optimize hakkında this question buldum. Neden C olduğunu bilmek istiyorum ne# mümkün olduğunca kuyruk özyineleme optimize değil mi?

Somut bir dava için neden bu yöntemi bir döngü (VS2008 32 bit, eğer sorun buysa tabii) optimize değil mi?:

private static void Foo(int i)
{
  if (i == 1000000)
    return;

  if (i % 100 == 0)
    Console.WriteLine(i);

  Foo(i 1);
}

CEVAP
29 Ocak 2009, PERŞEMBE


TAM zamanında derleme bir zor denge arasında çok fazla zaman geçiriyor yapıyor derleme aşaması, (böylece yavaşlama kısa ömürlü uygulamalar oldukça) vs yapmamak yeterli analize devam uygulama rekabet içinde uzun vadeli bir standart aramam derleme.

İlginç ngen derleme adımları değil hedef olmak daha agresif kendi iyileştirmeleri, sanıyorum bu, çünkü onlar sadece yok olmasını böcek nerede davranışlara bağımlı olup JİT veya ngen sorumluydu makine kodu.

Kendisi CLR tail call optimizasyonu destek, ama belirli bir dil derleyici opcode ve JİT saygı için istekli olmalıdır ilgili oluşturmak için nasıl bilmeniz gerekir. F#'fsc ilgili işlem kodları üretecektir s basit bir yineleme için sadece bir döngü içine her şeyi doğrudan dönüştürebilir. C#'nin csc değil.

Bazı ayrıntılar için this blog post (şimdi son JİT değişiklikleri dikkate alarak güncel kuvvetle muhtemel) CLR 4.0 the x86, x64 and ia64 will respect it için değiştiğine dikkat edin

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 2ndfloor91

    2ndfloor91

    17 Kasım 2007
  • Malwarebytes

    Malwarebytes

    22 Temmuz 2007
  • PomplamooseMusic

    PomplamooseM

    28 HAZİRAN 2008