У вас каша в голове. Вопрос не в размещении переменной, а в её
использовании. Для оптимизации вычислений по скорости, компилятор размещает копию переменной в регистре процессора, и освобождает регистр (с обратной записью) только если необходимо освободить место (либо происходит выход из функции). При этом в программе переменная может использоваться несколько раз (например в цикле), но чтения-записи в память не производится, ибо копия переменной лежит в регистре.
И метод её размещения не имеет значения, хоть static, хоть global, хоть auto. Размещение определяет место в памяти и область видимости, но для оптимизатора это не особо важно.
Volatile заставляет оптимизатор читать/писать память, при каждом появлении переменной в программе, даже в цикле! Где она размещена - пофигу, в глобальной области, в куче, на стеке (для auto), не важно.