Говорячи, що "компілятор виділяє пам'ять", можливо, не є фактично точним у прямому сенсі, але це метафора, яка навіює правильно.
Дійсно, що компілятор створює програму, яка виділяє власну пам'ять. За винятком того, що не програма виділяє пам'ять, а ОС.
Отже, що насправді відбувається, компілятор створює програму, яка описує його вимоги до пам'яті, а ОС приймає це опис і використовує його для розподілу пам'яті. За винятком того, що ОС - це програма, а програми насправді нічого не роблять, вони описують обчислення, які виконуються процесором. За винятком того, що процесор - це справді лише складна електронна схема, а не антропоморфізований маленький гомонкул.
Але має сенс думати про програми та компілятори та процесори як про маленьких людей, які живуть всередині комп'ютера, не тому, що вони є насправді, а тому, що це метафора, яка добре відповідає людському мозку.
Деякі метафори добре допомагають описувати речі на одному рівні абстракції, але не працюють також на іншому рівні. Якщо ви думаєте про рівень компілятора, має сенс описати акт генерації коду, що призведе до виділення пам'яті, коли програма, що компілюється, фактично працює як "розподілення пам'яті". Досить близько, що коли ми думаємо про те, як працює компілятор, ми маємо правильну ідею, і це не так довго, що ми забуваємо, що ми робили. Якщо ми спробуємо використати цю метафору на рівні запущеної програми, вона вводить в оману дивним чином, що саме ви помітили.