Powiedzenie „kompilator alokuje pamięć” może nie być faktyczne w dosłownym tego słowa znaczeniu, ale jest to metafora, która sugeruje we właściwy sposób.
Tak naprawdę dzieje się tak, że kompilator tworzy program, który przydziela własną pamięć. Tyle że to nie program przydziela pamięć, ale system operacyjny.
Tak naprawdę dzieje się tak, że kompilator tworzy program opisujący wymagania dotyczące pamięci, a system operacyjny bierze ten opis i używa go do przydzielania pamięci. Poza tym, że system operacyjny jest programem, a programy w rzeczywistości nic nie robią, opisują obliczenia wykonywane przez procesor. Tyle że procesor to tak naprawdę skomplikowany obwód elektroniczny, a nie antropomorficzny mały homonculus.
Ale sensowne jest myślenie o programach, kompilatorach i procesorach jako o małych ludziach mieszkających w komputerze, nie dlatego, że tak naprawdę są, ale dlatego, że jest to metafora, która dobrze pasuje do ludzkiego mózgu.
Niektóre metafory działają dobrze do opisywania rzeczy na jednym poziomie abstrakcji, ale nie działają również na innym poziomie. Jeśli myślisz na poziomie kompilatora, sensowne jest opisanie procesu generowania kodu, który spowoduje przydzielenie pamięci podczas kompilacji programu w rzeczywistości jako „alokację pamięci”. Jest na tyle blisko, że kiedy myślimy o tym, jak działa kompilator, mamy właściwy pomysł i nie jest tak długo rozwikłany, że zapominamy o tym, co robiliśmy. Jeśli spróbujemy użyć tej metafory na poziomie uruchomionego kompilowanego programu, wprowadzi to w dziwny sposób, co zauważyłeś.