SORU
29 AĞUSTOS 2008, Cuma


Varsa hangi C derleyicileri kuyruk özyineleme optimizasyonu?

Gayet iyi kuyruk özyineleme hem de optimizasyon C ve C , henüz ayıklarken hiç bu iyileştirme gösteren bir çerçeve yığını görmek gibi yapmak işe yarar gibi geliyor bana. Bu yığın özyineleme olduğunu söyleyemez, çünkü iyi. Ancak, optimizasyon biraz da iyi olurdu.

Herhangi bir C derleyicileri bu iyileştirme yapabilirim? Neden? Neden olmasın?

Nasıl derleyici bunu söylemek için ne yapmam lazım?

  • MSVC için: /O2 veya /Ox
  • GCC-O2 veya O3

Eğer derleyici belirli bir durumda bunu yapmış ise, nasıl kontrol ediyorsun?

  • MSVC için, PDB çıkış kodları takip edebilmek için etkinleştirme kodu inceleyin
  • GCC için..?

Yine de, eğer belirli bir işlevi derleyici Konrad bana danışmak için söyler bunu bana güven veriyor olsa bile) bu şekilde optimize edilmiş olup olmadığını belirlemek için nasıl önerileri almak istiyorum

Bu her zaman mümkün olmadığını denetlemek için derleyicinin yaptığı bütün bunları yaparak bir sonsuz özyineleme ve kontrol eğer sonuçlar sonsuz bir döngü ya da bir yığın taşması (yaptım bunu GCC öğrenmiş O2 yeterli), ama istiyorum edebilmek için kontrol belirli bir işlevi olduğunu biliyorum sonlandırılacak zaten. Kontrolü kolay bir yolu var bu :) çok isterim


Birkaç denemeden sonra, yıkıcılar bu optimizasyon yapma olasılığını berbat olduğunu keşfettim. Bazen buna değer bazı değişkenleri ve geçici kapsayan dönmek deyimi başlamadan önce kapsam dışına gitmek emin olmak için değiştirmek için olabilir.

Eğer herhangi bir yıkıcı kuyruk-Ara sonra çalıştırılması gerekiyorsa, tail call optimizasyonu yapılabilir.

CEVAP
29 AĞUSTOS 2008, Cuma


Her iki VC ve GCC geçerli sürümü oldukça iyi ve karşılıklı yinelemeli çağrılar için bile kuyruk çağrı iyileştirmeleri yapmak. Intel derleyici de eminim.

Derleyici optimizasyon basittir yapmasına izin vermek: hız optimizasyonu Sadece anahtar. Ama zaten, değil mi? ;-)

  • MSVC için, /O2 veya /Ox kullanın.
  • GCC-O3 kullanın

Eğer derleyici optimizasyon yaptığını kontrol etmek için en kolay yolu () başka bir yığın taşması sonucu bir arama gerçekleştirmek ya da montaj çıktı. Ancak, genellikle sadece derleyici optimizasyon yaptığını kabul cann.

EDİT/: C Tail call optimizasyonu diploma thesis İşareti ile bir Probst derste. GCC eklendi Tez uygulamasında bazı ilginç uyarılar anlatılmaktadır. Okumaya değer.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • arnejann

    arnejann

    3 Kasım 2007
  • oHeymarvin

    oHeymarvin

    11 Temmuz 2013
  • Tome Rodrigo

    Tome Rodrigo

    9 Temmuz 2006