Takma ad analizi - Alias analysis

Takma ad analizi bir tekniktir derleyici teorisi, bir depolama konumuna birden fazla yoldan erişilip erişilemeyeceğini belirlemek için kullanılır. İki işaretçi olduğu söyleniyor takma ad aynı yeri gösteriyorlarsa.

Diğer ad analiz teknikleri genellikle akış duyarlılığı ve bağlam duyarlılığı ile sınıflandırılır. Takma ad veya takma ad bilgileri belirleyebilirler. Dönem takma ad analizi genellikle birbirinin yerine kullanılır analiz edilecek noktalar, belirli bir durum.

Takma ad çözümleyicileri, anlamak için yararlı bilgiler oluşturmayı ve hesaplamayı amaçlamaktadır takma ad programlarda.

Genel Bakış

Genel olarak, takma ad analizi, ayrı bellek referanslarının aynı bellek alanını gösterip göstermediğini belirler. Bu, derleyicinin programdaki hangi değişkenlerin bir ifadeden etkileneceğini belirlemesini sağlar. Örneğin, yapıların üyelerine erişen aşağıdaki kod bölümünü göz önünde bulundurun:

p.foo = 1;q.foo = 2;ben = p.foo + 3;

Burada üç olası takma ad durumu vardır:

  1. P ve q değişkenleri başka ad olamaz (yani, asla aynı bellek konumuna işaret etmezler).
  2. P ve q değişkenleri başka ada sahip olmalıdır (yani, her zaman aynı bellek konumuna işaret ederler).
  3. P ve q takma ad olup olmadığı derleme zamanında kesin olarak belirlenemez.

P ve q takma ad veremiyorsa, o zaman i = p.foo + 3; değiştirilebilir i = 4. P ve q'nun takma adı olması gerekiyorsa, o zaman i = p.foo + 3; değiştirilebilir i = 5 Çünkü p.foo + 3 = q.foo + 3. Her iki durumda da, takma ad bilgisinden optimizasyonlar gerçekleştirebiliyoruz (başka hiçbir Konu aynı konumların güncellenmesi mevcut iş parçacığı ile karışabilir veya dilin bellek modeli bu güncellemelere izin verir hemen görünmemek açık olmadığında mevcut iş parçacığına senkronizasyon yapıları ). Öte yandan, p ve q takma adı olup olmadığı bilinmiyorsa, o zaman optimizasyon yapılamaz ve sonucu elde etmek için kodun tamamı çalıştırılmalıdır. İki bellek referansının bir olabilir-takma adı takma adları bilinmiyorsa ilişki.

Takma ad analizi yapma

Takma ad analizinde, programın belleğini ikiye böleriz takma ad sınıfları. Takma ad sınıfları, birbirine takma ad veremeyen ayrık konum kümeleridir. Buradaki tartışma için, burada yapılan optimizasyonların düşük düzeyde gerçekleştiği varsayılmaktadır. ara temsil programın. Bu, programın ikili işlemler, atlama, yazmaçlar arasında hareket etme, kayıtlardan belleğe, bellekten yazmaçlara, dallara ve işlev çağrılarına / dönüşlerine doğru derlendiğini söylemektir.

Tür tabanlı takma ad analizi

Derlenen dil ise güvenli yazın, derleyicinin tür denetleyicisi doğrudur ve dil, yerel değişkenleri referans alan işaretçiler oluşturma yeteneğinden yoksundur (örneğin ML, Haskell veya Java ) daha sonra bazı faydalı optimizasyonlar yapılabilir.[1] İki bellek konumunun farklı takma ad sınıflarında olması gerektiğini bildiğimiz birçok durum vardır:

  1. Farklı türlerdeki iki değişken, güçlü bir şekilde yazılmış, bellek referansı olmayan (yani bellek konumlarına yapılan başvurular doğrudan değiştirilemez) dillerin bir özelliği olduğu için aynı takma ad sınıfında olamaz, farklı türlerdeki iki değişken aynı bellek konumunu paylaşamaz eşzamanlı.
  2. Geçerli yığın çerçevesine yerel tahsisler, başka bir yığın çerçevesinden önceki herhangi bir ayırma ile aynı takma ad sınıfında olamaz. Yeni bellek ayırmalarının diğer tüm bellek ayırmalarından ayrılması gerektiğinden bu durum söz konusudur.
  3. Her kayıt türünün her kayıt alanı, genel olarak kendi takma ad sınıfına sahiptir, çünkü yazma disiplini genellikle yalnızca aynı türdeki kayıtların takma ada sahip olmasına izin verir. Bir türdeki tüm kayıtlar bellekte aynı formatta saklanacağından, bir alan yalnızca kendisine takma ad verebilir.
  4. Benzer şekilde, belirli bir türdeki her dizinin kendi takma ad sınıfı vardır.

Kod için takma ad analizi yaparken, belleğe yapılan her yükleme ve depolama, kendi sınıfıyla etiketlenmelidir. Daha sonra, hafıza konumları verilen faydalı özelliğe sahibiz ve ile takma ad sınıfları, eğer sonra olabilir-takma adı , ve eğer o zaman bellek konumları takma ad olmaz.

Akış tabanlı takma ad analizi

Akışa dayalı analiz, referanslarla veya tip atamayla bir dildeki programlara uygulanabilir. Akış bazlı analiz, tip bazlı analiz yerine veya tamamlayıcı olarak kullanılabilir. Akış tabanlı analizde, her bellek tahsisi ve adresi kullanılan her global ve yerel değişken için yeni takma ad sınıfları oluşturulur. Referanslar zaman içinde birden fazla değere işaret edebilir ve bu nedenle birden fazla takma ad sınıfında olabilir. Bu, her bellek konumunun tek bir takma ad sınıfı yerine bir dizi takma ad sınıfına sahip olduğu anlamına gelir.

Ayrıca bakınız

Referanslar

  1. ^ Diwan, Amer; McKinley, Kathryn S .; Moss, J. Eliot B. (1998). "Türe dayalı takma ad analizi". ACM SIGPLAN 1998 Programlama dili tasarımı ve uygulaması konferansı bildirileri - PLDI '98. Montreal, Quebec, Kanada: ACM Press: 106–117. doi:10.1145/277650.277670. ISBN  978-0-89791-987-6.
  • Appel, Andrew W. (1998). Makine öğreniminde Modern Derleyici Uygulaması. Cambridge, İngiltere: Cambridge University Press. ISBN  0-521-60764-7.

Dış bağlantılar