Yüksek düzeyde derlenmiş bir dil için bir bayt kodu yazıyoruz ve bir miktar profilleme ve optimizasyondan sonra, mevcut en büyük performans ek yükünün kullandığımız anahtar ifadesi olduğu ortaya çıktı Bayt kodu davalarına atlamak için.Etiketlerin Adresi (MSVC)
Her bir durum etiketinin adresini çekip, genellikle açtığımız yönerge kimliğinden ziyade bayt kodunun kendisinde saklamayı araştırdık. Bunu yaparsak, atlama tablosunu atlayabilir ve doğrudan o anda yürütülen komutun kodunun konumuna atlayabiliriz. Bu, GCC'de fevkalade çalışır, ancak MSVC böyle bir özelliği desteklemiyor gibi görünmektedir.
Etiketlerin adresini (ve bunlara atlamak için) almak için satır içi derlemeyi kullanmayı denedik ve satır içi montajı kullanarak MSVC iyileştiricisi tarafından tüm işlevlerden kaçınılmasına neden oluyor.
Eniyileyicinin kod üzerinde çalışmasına izin verilmesinin bir yolu var mı? Ne yazık ki, satır içi montajı etiketlerin yapıldığı yer dışındaki bir başka işleve ayıklayamayız, çünkü bir satır içi montajda bile başka bir işlev için bir etikete başvurmanın bir yolu yoktur. Herhangi bir düşünce ya da fikir? Girişiniz çok takdir edildi, teşekkürler!
İşlev işaretçileri denediniz mi? –
Bayt kodunda etiket adresleri yerine işlev adresleri koymaya ne dersiniz? Daha sonra her komut için bir işleviniz var. Getirme-yürütme döngüsünüz büyük etiketli işlevlerinizde değilse. –
Her bir vaka için işlevler ve etiket adresleri yerine kullanılan işlev işaretçileri kullansaydım, çalışırdı.Bununla birlikte, işlev çağrısı yükü, işlev önemsiz olsa bile (hiçbir argüman, geri dönüş yok) herhangi bir performans kazancını geçersiz kılacak kadar büyük olacağını düşünüyorum. Yine de deneyeceğim ve gönderdiğiniz için teşekkürler. – Trevor