Базовый ответ: значение переменной хранится в стеке. Есть программа, ей при запуска ОС выдает кусок памяти. В этом куске есть стек переменных, там и хранится эта глобалка.
Любая переменная скрывает собой указатель. Грубо говоря, ты пишешь int a=2, что во время выполнения трансформируется в mov 00ff00aa, 2. Прога во время работы попросит у ОС кусок памяти, и в нем жестко выделит место под примитив. Везде, где в исходниках стоит переменная 'a', в бинарниках будет выделенный адрес (компилятор постарается).
Плюс, есть сильная зависимость от языка. Если используется Java, примитив может оказаться в куче (сам не джавист, но в .NET подобные ситуации возможны). Там, по идее, точное расположение в памяти зависит от реализации сборщика. Но тут нужен джавист-спец.