SORU
20 Mart 2009, Cuma


C sınıfı sanal bir yöntem olan performans maliyeti nedir?

C sınıfı (veya üst sınıflardan herhangi biri) en az bir yöntem olan sanal sınıf sanal bir tablo var demektir ve her seferinde sanal bir işaretçi olacak.

Bellek maliyeti oldukça açıktır. En önemli bellek maliyet örnekleri (özellikle örneklerini küçük, örneğin, eğer onlar sadece ifade içeren bir tamsayı: bu durumda olan bir sanal işaretçi her örnek olabilecek iki katı büyüklüğe örnekleri. Bellek alanını sanal tablolar tarafından kullanılan, genellikle alan gerçek usulde kodu tarafından kullanılan ile karşılaştırıldığında göz ardı edilebilir sanırım.

Bu benim soruma geçeyim: ölçülebilir performans maliyet (hız etkisi gibi) bir yöntem sanal yapmak için var mı? Olacak bir arama sanal masada çalışma zamanı, üzerine her yöntem çağrısı, eğer öyleyse orada çok sık yapılan aramalar için bu yöntem ve bu yöntemi çok kısa, o zaman olabilir bir ölçülebilir performans vurdu? Platforma bağlı sanırım, ama herkes bazı kriterler tükendi?

Ben soruyorum nedeni arasında bir programcı bir yöntem sanal tanımlamak için unutma nedeniyle oldu bir hata geldi. Bu böyle bir hata ilk defa görüyorum. Ve düşündüm: neden yapıyoruzekleyingerektiğinde sanal sözcüğü yerinekaldırılıyorsanal olduğundan kesinlikle emin olduğumuz zaman anahtar kelimedeğilgerekli? Maliyeti düşük performans, sadece benim takımım aşağıdaki tavsiye edeceğim sanırım: sadece olunheryöntem varsayılan, yıkıcı dahil ederek sanal, her sınıfta, ve sadece ihtiyacınız olduğunda çıkarabilirsiniz. Bu sana da saçma gelmiyor mu?

CEVAP
20 Mart 2009, Cuma


0 **-sırayla Power PC işlemci 3 GHz. Bu mimari, sanal işlev çağrısı (sanal olmayan) doğrudan bir işlev çağrısı daha uzun 7 nanosaniye maliyetleri.

Yani, gerçekten işlevi sürece maliyeti önemsiz gibi bir şey olur endişesi değmez () ve Set() erişimci, hangi bir şey, içi başka tür bir zarara neden oluyor. 0.5 ns inlines bir fonksiyonu 7ns bir yükü ağır; yürütmek için 500ms götüren bir fonksiyon 7ns bir havai anlamsız.

Sanal fonksiyonların büyük maliyet gerçekten taban olarak işlev işaretçisi arama değil (genellikle sadece tek bir döngüsü var), ama dolaylı atlamak genellikle şube-öngörülebilir. Bu işlemci mümkün olduğunca daha büyük bir boru hattı kabarcık dolaylı atlama (işlev işaretçisi aracılığıyla çağrı) emekli olana kadar herhangi bir talimat getir neden olabilir ve yeni bir yönerge işaretçisi hesaplanmış. Yani, sanal bir işlev çağrısı maliyeti Meclisi... ama hala sadece 7 nanosaniye bakarak göründüğünden çok daha büyük.

Düzenleme:Andrew, Emin Değilim, ve diğerleri de zam çok iyi işaret eden bir sanal işlev çağrısı olabilir neden bir yönerge önbelleği Bayan: eğer atlamak için bir kod adresi olmayan önbellek o zaman tüm program geliyor ölü bir halt olsa talimatlar getirilen ana bellek. Buher zamanönemli bir durak: Xenon üzerinde, yaklaşık 650 devir (benim testleri ile).

Ancak bu bile doğrudan bir işlev çağrısı ise önbellekte olmayan talimatları atlamak bir bayan neden olur, çünkü bu bir sorun sanal işlevler için belirli değil. Neyin önemli olup olmadığını işlevi olmuştur çalıştırmadan önce son zamanlarda (yapma bunu daha fazla önbellek), ve ister mimari tahmin edebilirsiniz statik (sanal) şube ve getir şu talimatları cache öncesinde zaman. Benim PPC değil, ama belki de Intel'in en son donanım yok.

İcache etkisi için zamanlamaları kontrolüm yürütme (kasten beri izole CPU boru hattı incelemek için çalışıyordum) özlüyor, onlar bu bedeli indirimi.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • jagadambarecords

    jagadambarec

    13 AĞUSTOS 2008
  • Simon Hayter

    Simon Hayter

    20 HAZİRAN 2010
  • sWooZie

    sWooZie

    9 ŞUBAT 2006