Для глобальных переменных в C как
интервал aglobal = 5;
Когда эти 5 становятся переданными в aglobal загрузчиком и как он знает для помещения 5 в aglobal.
Та же ситуация со статическим объявлением в функции. Как
интервал afunc () {статический интервал, неустойчивый = 8; возвратитесь неустойчивый;}
В разделе данных создается пространство размером int, в котором закодировано значение 5, а глобальный нефункциональный символ с именем aglobal добавляется в таблицу символов, указывающую на него.Ссылки на aglobal превращаются в перемещения, которые разрешаются во время компоновки, чтобы указать на этот блок данных, поэтому в полностью связанном изображении инструкции будут загружаться непосредственно из того места в памяти, которое содержит значение 5
Например, ( x86) может выглядеть примерно так:
.data
.globl aglobal
aglobal: .long 5
.text
main:
mov eax, aglobal
В объектном файле инструкция mov превратится в mov eax, 0
с перемещением R_386_32 aglobal + 0
, потому что объектный файл точно не знает, где в памяти будет находиться секция данных.
В полностью связанном изображении это может выглядеть примерно так:
mov eax, 0x804a010
Теперь известен фактический адрес 4 байтов в разделе данных, поэтому он указан напрямую