Во время компиляции компилятор принимает к сведению объявления переменных и ищет типы данных определенных переменных.Следовательно, после просмотра объявления
int a = 10;
int* p = &a;
компилятор знает типы данных переменных (но все еще не знает значений).
Во время выполнения компилятору необходимо выделить память(что, очевидно, не то же самое для 'int' и 'int *') для переменных, так что значения могут быть сохранены.Следовательно, компилятор должен знать типы данных.
Таким же образом компилятор работает с различными типами данных.