Decir "el compilador asigna memoria" puede no ser fácticamente exacto en el sentido literal, pero es una metáfora que sugiere de la manera correcta.
Lo que realmente sucede es que el compilador crea un programa que asigna su propia memoria. Excepto que no es el programa el que asigna memoria, sino el sistema operativo.
Entonces, lo que realmente sucede es que el compilador crea un programa que describe sus requisitos de memoria y el sistema operativo toma esa descripción y la usa para asignar memoria. Excepto que el sistema operativo es un programa y los programas en realidad no hacen nada, describen un cálculo que realiza la CPU. Excepto que la CPU es realmente solo un circuito electrónico complicado, no un pequeño homónimo antropomorfizado.
Pero tiene sentido pensar en los programas, compiladores y CPU como personas pequeñas que viven dentro de una computadora, no porque realmente lo sean, sino porque es una metáfora que se adapta bien al cerebro humano.
Algunas metáforas funcionan bien para describir cosas en un nivel de abstracción, pero no funcionan tan bien en otro nivel. Si piensa en el nivel del compilador, tiene sentido describir el acto de generar código que dará como resultado que se asigne memoria cuando el programa que se está compilando realmente se ejecuta como "asignación de memoria". Es lo suficientemente cercano como para que cuando pensemos en cómo funciona un compilador, tengamos la idea correcta, y no sea tan largo que olvidemos lo que estábamos haciendo. Si tratamos de usar esa metáfora en el nivel del programa compilado en ejecución, es engañoso de una manera extraña, que es lo que notó.