Как неинициализированная переменная получает значение для мусора?

Когда мы создаем переменную и не инициализируем ее, ей присваивается некоторый (случайный) номер, называемый значением мусора.

  • Как это значение присваивается переменной?
  • Что представляет собой целая концепция/механизм?
  • Это происходит только в C?

Ответ 1

Значение мусора не назначено, а значение уже существует. Когда вы выделяете переменную, вы резервируете часть памяти - пока вы ее не перезапишете, эта память будет содержать любую "случайную" информацию раньше.

Как метафора, подумайте о том, чтобы выделить такую ​​переменную, как покупка участка земли - пока вы что-нибудь с ней не сделаете (например, постройте дом), на земле будет только то, что там уже сидит там (как старый рушившийся дом).

Некоторые языки автоматически заполнят вновь назначенные переменные нулями - это требует времени. В более "самодельных" языках, таких как C, это дополнительное поведение не является гарантированным (хотя в некоторых системах память очищается независимо от языка, например, в качестве меры безопасности)

Ответ 2

Память используется и используется повторно в разных точках приложения. Например, по мере того как стек вызовов вашего приложения растет и сжимается, одно и то же место в памяти может быть перезаписано много раз. Следует помнить, что, поскольку часть памяти заброшена, она не обнуляется, поэтому, если вы не укажете новое начальное значение для этого места в памяти при повторном использовании, вы получите старое значение "мусора".

Некоторые языки и реализация структуры делают по умолчанию инициализацию памяти, поскольку она используемый. Другие этого не делают, поэтому важно внимательно прочитать документацию на своем языке, чтобы знать, чего ожидать.

Ответ 3

Когда мы создаем переменную и не инициализируем ее, ничего не происходит. Когда вы читаете значение из этой переменной, вы получаете данные из памяти, где теперь находится переменная. Это может выглядеть как мусор/случайное значение только потому, что переменные помещаются в память с некоторой степенью случайности.

Ответ 4

Никто явно не назначает значение grabage. Если вы создаете переменную, определяется только местоположение переменной, а не ее значение. Вот почему мы его инициализируем. Значение мусора может быть связано с некоторыми предыдущими операциями над той же памятью старыми процессами! Таким образом, он может держать что угодно. Я думаю, что это относится к довольно хорошему числу языков. Я не уверен в списке!:)

Ответ 5

Стандарты C говорят:

Реализация: подробное рассмотрение реализации по адресу: fooobar.com/info/9434/... Резюме:

  • local: адрес никогда не записывается, поэтому все, что ранее использовалось, используется
  • global: .bss