Kayıtların tahsisi

Bir derleyicide , kayıtların tahsis edilmesi , kod üretiminde önemli bir adımdır . Bu neyi akıllıca seçim hedefliyor kayıt ait CPU lar kaydedilecektir' değişkenleri derlemek programın yürütülmesi sırasında.

Kayıtlar, genellikle bir makine kelimesi içerebilen, işlemcinin dahili hafızalarıdır. Kayıtlarda saklanan değerler üzerindeki işlemler, mümkün olan tek şey bunlar olmadığında, RAM'deki değerlerden daha hızlıdır . Ancak bir işlemcinin nadiren birkaç düzineden fazla kaydı vardır, bir programdaki tüm değişkenler için çok azdır. Bu nedenle, uygulamanın her aşamasında kayıtlarda bulunması gereken değişkenleri uygun şekilde seçmek çok önemlidir. Bu, derlemenin ilk aşamalarında zor olduğundan, sınırsız sayıda yazmacımız varmış gibi davranarak başlıyoruz, sonra bu sanal yazmaçlara gerçek yazmaçlar veya bellek konumları atıyoruz.

Tahsisatı grafik renklendirmeyle kaydedin

Klasik yazmacı ayırma yöntemlerinden biri için sorun azaltmaktır boyama arasında girişim grafik değişkenlerinin. Bu grafiğin köşeleri programın değişkenleridir ve karşılık gelen değişkenler karışırsa iki köşe bir kenarla bağlanır.

Biri tanımlanırken diğeri aktifken (yani yürütmenin geri kalanında kullanılabilecek) iki değişkenin karıştığını söylüyoruz. Müdahale eden iki değişken aynı kayda yerleştirilemez - tek bir teknik nitelikle: bazı işlemcilerde kayıtlar eşdeğer değildir. Bu nedenle , hepsinin birbirine karıştığını ve bir değişkenin kendisine yasak olan kayıtlara müdahale ettiğini kabul ederek , müdahale ilişkisini kaydettirmek için genişletiyoruz . Böylece, bir can not renk girişim grafiğinde komşu olan iki değişken aynı kayıt ile. Kayıtları değişkenlere atamak , girişim grafiğini renklerle renklendirmekle eşdeğerdir .

-Coloration sorunu olan NP-tam (için ) ve bir grafik için. Herhangi bir grafiğe gelince, girişim grafiği olan bir program oluşturmak mümkündür , kayıt tahsis problemi de NP-tamdır. Ayrıca genellikle iyi pratik sonuçlar sağlayan bir buluşsal yöntem kullanırız . Renklendirmesi kolay olan köşeleri grafikten çıkarmaktan ibarettir: grafiğe, kesinlikle daha küçük olan bir derece köşesi için bakarız . Komşuları daha çok renk kullanacağı için bu zirveyi renklendirebileceğimizden eminiz . Bu yüzden onu grafikten çıkarıyoruz ve bir kenara bırakıyoruz. Basitleştirilmiş grafiği yinelemeli olarak renklendirmeyi başarırsak, onu yeniden yerleştirebilir ve renklendirebiliriz.

Tüm köşelerin en azından derecesi varsa , birkaç strateji mümkündür:

Ayrıca görün


<img src="https://fr.wikipedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" title="" width="1" height="1" style="border: none; position: absolute;">