Dire «le compilateur alloue de la mémoire» peut ne pas être exact dans les faits au sens littéral, mais c'est une métaphore qui est suggestive dans le bon sens.
Ce qui se passe vraiment, c'est que le compilateur crée un programme qui alloue sa propre mémoire. Sauf que ce n'est pas le programme qui alloue la mémoire, mais le système d'exploitation.
Donc, ce qui se passe vraiment, c'est que le compilateur crée un programme qui décrit ses besoins en mémoire et que le système d'exploitation prend cette description et l'utilise pour allouer de la mémoire. Sauf que l'OS est un programme et que les programmes ne font rien, ils décrivent un calcul effectué par le CPU. Sauf que le CPU n'est vraiment qu'un circuit électronique compliqué, pas un petit homonculus anthropomorphisé.
Mais il est logique de considérer les programmes et les compilateurs et les processeurs comme de petites personnes qui vivent à l'intérieur d'un ordinateur, non pas parce qu'ils le sont réellement, mais parce que c'est une métaphore qui convient bien au cerveau humain.
Certaines métaphores fonctionnent bien pour décrire les choses à un niveau d'abstraction, mais ne fonctionnent pas aussi bien à un autre niveau. Si vous pensez au niveau du compilateur, il est logique de décrire l'acte de générer du code qui entraînera l'allocation de mémoire lorsque le programme en cours de compilation est en fait exécuté comme "allocation de mémoire". Il est suffisamment proche pour que lorsque nous réfléchissons au fonctionnement d'un compilateur, nous ayons la bonne idée, et ce n'est pas si long que nous oublions ce que nous faisions. Si nous essayons d'utiliser cette métaphore au niveau du programme compilé en cours d'exécution, c'est trompeur d'une manière étrange, ce que vous avez remarqué.