Почему адрес переменной постоянно меняется между запусками

Я сделал две программы на C, которые были точными копиями друг друга.Скомпилировал их на платформе Linux (Ubuntu 10.04) с помощью компилятора gcc и получил два отдельных исполняемых файла. Затем я получил код сборки обоих исполняемых файлов с помощью objdump и обнаружил, что код сборки точно такой же и даже адреса соответствующих инструкций в двух файлах сборки. был таким же. Программа должна была напечатать адрес переменной в нем. Программы при запуске производят разные адреса, и, более того, одна и та же программа выдает другой адрес при каждом запуске. Почему адрес строк кода в двух программах одинаковый, но адрес переменной изменяется даже для одной и той же программы каждый раз, когда она запускается. Я думаю, что адрес, напечатанный переменной на экране, является виртуальным адресом, но если его виртуальный, почему он не может быть одинаковым каждый раз. Это адрес, показанный в коде сборки, полученный с помощью objdump тоже виртуальный?

5
задан NPE 23 January 2012 в 09:04
поделиться