Makine kodunun yanı sıra, kelimenin tam anlamıyla kaynak metni besleyememeniz açısından, doğrudan donanım üzerinde çalışan bir programlama dili yoktur. Tüm gerçek uygulamalar , kaynak programı "makine" diline çevirmelidir .
Bazı uygulamalar için statik olarak çevrilmiştir. Biz genellikle bu uygulamaları "derlenmiş" olarak adlandırırız. Diğerleri için, bazı ara formlara çevrilir ve daha sonra program çalıştırılırken dinamik olarak çevrilir. Bu uygulamalara genellikle "yorumlanmış" diyoruz. Bunlar arasında bir olasılık sürekliliği vardır ve birçok modern CPU bile yürütme çekirdeğinin bir parçası olarak dinamik çeviri yapar.
Programınız yürütmeden çok önce statik olarak derlendiğinde bile, ürün yazılımı yazmıyorsanız, derlenmiş kodun doğrudan çıplak metal üzerinde çalışmasını desteklemez. İşletim sistemi, kullanıcı alanı programları için sanal bir makine sağlar ve genellikle kendinize bir CPU'nuz olduğu yanılsaması gibi özellikler sağlar. Makineye bağlı fiziksel RAM'den daha büyük olabilecek düz bir bellek alanının yanılsamasına "sanal bellek" denir.
Üstelik, C dilinde programlama yaparken bile, bir C sanal makinesi var! Geleneksel olarak "C çalışma zamanı" veya kısaca CRT olarak adlandırılır.
C çoğunlukla doğrudan önceden montaj / makine koduna çevrildiğinden (bazı platformlarda, bazı dişli kodlar da olabilir ve bu sanal makinenin bir parçası olarak düşünülebilir), sanal makine genellikle yalnızca başlatma ve kapat.
Başlatma genellikle yığının ve yığının ayarlanmasını içerir; işletim sistemi bunları nadiren sizin için sağlar ve bunları programcıya sağlamak programlama dilinin görevidir. Bazı platformlarda, sinyal işlemenin başlatılması, çok iş parçacıklı bir ortamda "ana" iş parçacığının kurulması, programın C ++ koduna bağlı olması, dinamik olarak bağlanmış kütüphanelerin işlenmesi veya argc / argv ve envp'yi ayarlamak için bazı işlemler gerekli olabilir. Son olarak, CRT kontrolü ana sisteme aktarır.
Kapatma gelince, birçok işletim sistemi bir işlemi kirli bir şekilde öldürebilir, bu nedenle kapatma işleminin çok fazla yapılması gerekmez. Ana şey, programın temiz bir şekilde çıktığı durum için atexit () çağrılarını işlemektir.