Dizer "o compilador aloca memória" pode não ser factualmente preciso no sentido literal, mas é uma metáfora sugestiva da maneira correta.
O que realmente acontece é que o compilador cria um programa que aloca sua própria memória. Exceto que não é o programa que aloca memória, mas o sistema operacional.
Então, o que realmente acontece é que o compilador cria um programa que descreve seus requisitos de memória e o sistema operacional pega essa descrição e a usa para alocar memória. Exceto que o sistema operacional é um programa e os programas realmente não fazem nada, eles descrevem uma computação executada pela CPU. Exceto que a CPU é realmente apenas um circuito eletrônico complicado, não um homônculo antropomorfizado.
Mas faz sentido pensar em programas, compiladores e CPUs como pessoas pequenas que vivem dentro de um computador, não porque realmente são, mas porque essa é uma metáfora que se encaixa bem no cérebro humano.
Algumas metáforas funcionam bem para descrever as coisas em um nível de abstração, mas não funcionam tão bem em outro nível. Se você pensa no nível do compilador, faz sentido descrever o ato de gerar código que resultará na alocação de memória quando o programa que está sendo compilado for realmente executado como "alocação de memória". É perto o suficiente para que, quando pensemos em como um compilador funcione, tenhamos a idéia certa e não demore tanto tempo para esquecermos o que estávamos fazendo. Se tentarmos usar essa metáfora no nível do programa compilado em execução, ela será enganosa de uma maneira estranha, e foi o que você notou.