Por que os livros dizem “o compilador aloca espaço para variáveis ​​na memória”?

Por que os livros dizem "o compilador aloca espaço para variáveis ​​na memória". Não é o executável que faz isso? Quero dizer, por exemplo, se eu escrever o seguinte programa,

#include <iostream>
using namespace std;

int main()
{
   int foo = 0;
   cout<<foo;
   return 0;
}

e compilá-lo, e obter um executável (let it be program.exe), agora, se eu executar o program.exe, este arquivo executável irá comandar para alocar algum espaço para a variável foo. Não vai? Por favor, explique por que os livros continuam dizendo: "o compilador fará isso ... faça aquilo", enquanto, na verdade, o executável compilado faz isso.

Adicionando outra questão relacionada a essa pergunta, por quesizeof chamado operador de compilação? Não é realmente um operador de tempo de execução?

questionAnswers(7)

yourAnswerToTheQuestion