Öğrenim derlemesinin ötesinde, C gibi düşük seviyeli bir dilin nasıl derlendiğini öğrenmenin çok değerli olduğuna inanıyorum. Yani cevabım evet, ama yine de muhtemelen yanlıyım çünkü düşük seviyeli programlamanın tadını çıkarıyorum.
Örneğin, basit ifadelerin nasıl derlendiğini anlamak. Aşağıdaki fonksiyon,
int func(int val)
{
int num = val * 5;
return num;
}
... olur (en azından ilginç kısım):
movl %edi, -20(%rbp)
movl -20(%rbp), %edx
movl %edx, %eax
sall $2, %eax
addl %edx, %eax
Bu kod, bağımsız değişkeni yığından alır (val, func parametresi), 2 sola kaydırır (2 ^ 2 veya 4 ile çarp) ve sonra sonuca orijinal değeri ekler. Sonuç, 5 ile çarpmadır. Bunun gibi bir örnek, derleyici optimizasyonları gibi dikkat edilmesi gereken birkaç şeyi gösterir. Doğrudan 5 ile çarpmak için bir talimat çağırmak yerine, iki yeri 4 ile çarpacak şekilde kaydırır ve sonra orijinal değeri ekler. Olayları daha düşük bir seviyede anlamamı büyük ölçüde iyileştirmek için böyle örnekler buldum.
Bu -S
seçenek ile gcc'den derleyici çıktısı oluşturun . Ancak, sonuçların derleyici ve optimizasyon düzeyine göre değişeceğini unutmayın.
Her neyse, derleme dili programcısı olmanın derlemeyi anlamakla aynı şey olduğunu düşünmüyorum . Yine, C gibi bir dilde programlamanın ve makine koduna nasıl konulduğunu bilmenin değerli bir uygulama olduğunu hissediyorum.