Mengatakan "kompiler mengalokasikan memori" mungkin secara faktual tidak akurat dalam arti literal, tetapi itu adalah metafora yang sugestif dengan cara yang benar.
Apa yang sebenarnya terjadi adalah bahwa kompiler membuat program yang mengalokasikan memori sendiri. Kecuali itu bukan program yang mengalokasikan memori, tetapi OS.
Jadi apa yang sebenarnya terjadi adalah bahwa kompiler membuat program yang menggambarkan persyaratan memorinya dan OS mengambil deskripsi itu dan menggunakannya untuk mengalokasikan memori. Kecuali bahwa OS adalah sebuah program, dan program tidak benar-benar melakukan apa-apa, mereka menggambarkan perhitungan yang dilakukan oleh CPU. Kecuali bahwa CPU benar-benar hanya sirkuit elektronik yang rumit, bukan homonculus kecil yang antropomorfis.
Tetapi masuk akal untuk berpikir tentang program dan kompiler dan CPU sebagai orang kecil yang hidup di dalam komputer, bukan karena mereka sebenarnya, tetapi karena itu adalah metafora yang cocok dengan otak manusia dengan baik.
Beberapa metafora bekerja dengan baik untuk menggambarkan hal-hal pada satu tingkat abstraksi, tetapi tidak berfungsi dengan baik pada tingkat lain. Jika Anda berpikir pada tingkat kompiler, masuk akal untuk menggambarkan tindakan menghasilkan kode yang akan mengakibatkan memori dialokasikan ketika program yang sedang dikompilasi sebenarnya dijalankan sebagai "mengalokasikan memori". Cukup dekat sehingga ketika kita berpikir tentang cara kerja kompiler, kita punya ide yang tepat, dan tidak terlalu bertele-tele sehingga kita lupa apa yang kita lakukan. Jika kami mencoba menggunakan metafora itu pada tingkat program yang dikompilasi berjalan, itu menyesatkan dengan cara yang aneh, yang Anda perhatikan.