Скорее всего, вы хотите, чтобы ваше определение было таким:
#define MONTHS 12
/* some code here... */
int payAnnual = payMonthly * MONTHS;
Для ответа на ваш вопрос память не будет использоваться. Препроцессор не знает о таких понятиях, как переменные и память. По сути, это автоматический текстовый редактор. Он заменяет любое вхождение символа МЕСЯЦЕВ на 12.
Поскольку препроцессор настолько глуп, как правило, предпочтительно использовать переменную const. Это дает вам преимущество проверки типов и может облегчить чтение ошибок компилятора. И пока вы объявляете его статическим, переменная будет оптимизирована. (Если вы не объявляете глобальную переменную static в C, по умолчанию она будет экспортирована, поэтому компилятор не сможет полностью ее оптимизировать.)
static const int MONTHS = 12;