Почему адрес переменной меняется после каждого выполнения в C? - PullRequest
3 голосов
/ 17 мая 2010
int i=10;
printf("Address of i = %u",&i);

Output:
Address if i = 3220204848

Output on re-execution:
Address of i = 3216532594

Я получаю новый адрес i каждый раз, когда я запускаю программу. Что это значит?

Ответы [ 3 ]

7 голосов
/ 17 мая 2010

Это означает, что ваша программа загружается с разным (виртуальным) адресом при каждом запуске. Эта функция называется Рандомизация размещения адресного пространства (ASLR) и является функцией большинства современных операционных систем.

1 голос
/ 17 мая 2010

Так работают операционные системы. Когда вы объявляете переменную, вы просите базовые системы выделить блок памяти (адрес) для хранения этих данных (или указатель на другой блок, если вы имеете дело с указателями, но здесь у вас есть примитив, поэтому это просто данные, которые хранятся). Программа не заботится о том, где находится память, просто о том, что она существует, потому что она знает, как отслеживать все, что ей дают.

Как программист, это действительно не так уж важно, если вы не выполняете невероятно низкоуровневую работу. Для большинства людей труднее всего понять, что когда вы работаете с указателями, вы не можете приравнивать вещи так же, как примитивы, потому что указатели считают, что их значения (при использовании == в качестве экватора) их адреса памяти.

0 голосов
/ 02 января 2014

Во время выполнения программы c запущены другие процессы. При повторном выполнении кода вы будете назначать новый адрес, ранее выделенный адрес будет выделен для другого процесса.

...