Dire che "il compilatore alloca la memoria" potrebbe non essere effettivamente accurato in senso letterale, ma è una metafora che è suggestiva nel modo giusto.
Ciò che realmente accade è che il compilatore crea un programma che alloca la propria memoria. Tranne che non è il programma che alloca la memoria, ma il sistema operativo.
Quindi ciò che realmente accade è che il compilatore crea un programma che descrive i suoi requisiti di memoria e il sistema operativo prende quella descrizione e la usa per allocare memoria. Tranne che il sistema operativo è un programma, e i programmi in realtà non fanno nulla, descrivono un calcolo che viene eseguito dalla CPU. Tranne che la CPU è in realtà solo un complicato circuito elettronico, non un piccolo omologo antropomorfizzato.
Ma ha senso pensare a programmi, compilatori e CPU come piccole persone che vivono all'interno di un computer, non perché lo siano effettivamente, ma perché è una metafora che si adatta bene al cervello umano.
Alcune metafore funzionano bene per descrivere le cose a un livello di astrazione, ma non funzionano altrettanto bene ad un altro livello. Se si pensa al livello del compilatore, ha senso descrivere l'atto di generare codice che determinerà l'allocazione della memoria quando il programma che viene compilato viene effettivamente eseguito come "allocazione della memoria". È abbastanza vicino che, quando stiamo pensando a come funziona un compilatore, abbiamo l'idea giusta, e non è così prolisso che dimentichiamo quello che stavamo facendo. Se proviamo a usare quella metafora a livello del programma compilato in esecuzione, è fuorviante in un modo strano, che è ciò che hai notato.