При инициализации глобальные / статические переменные сохраняются в сегменте .DATA. Когда вы объявляете данные в сегменте .DATA, вы предоставляете значения для этих данных, чтобы их нужно было хранить как часть исполняемого файла.
С другой стороны, вы только объявляете, сколько данных вам нужно для .BSS, поскольку вам не нужно знать, каковы значения. Поэтому, если ваша программа объявила о 2 ГБ неинициализированной памяти, то эти 2 ГБ не влияют на размер вашего исполняемого файла, вы не увидите его до тех пор, пока он не будет загружен.