Почему книги говорят: «Компилятор выделяет пространство для переменных в памяти»?
Почему книги говорят: «Компилятор выделяет пространство для переменных в памяти». Разве это не исполняемый файл, который делает это? Я имею в виду, например, если я напишу следующую программу,
#include <iostream>
using namespace std;
int main()
{
int foo = 0;
cout<<foo;
return 0;
}
и скомпилировать его, и получить исполняемый файл (пусть это будет program.exe), теперь, если я запустлю program.exe, этот исполняемый файл сам даст команду выделить место для переменной foo. Не так ли? Пожалуйста, объясните, почему книги продолжают говорить: «компилятор сделает это ... сделайте это», тогда как на самом деле скомпилированный исполняемый файл делает это.
Добавив еще один связанный вопрос к этому вопросу, почемуsizeof
называется оператором времени компиляции? Разве это не оператор во время выполнения?