Когда мы создаем переменную и не инициализируем ее, ей присваивается некоторый (случайный) номер, называемый значением мусора.
- Как это значение присваивается переменной?
- Что представляет собой целая концепция/механизм?
- Это происходит только в C?
Когда мы создаем переменную и не инициализируем ее, ей присваивается некоторый (случайный) номер, называемый значением мусора.
Значение мусора не назначено, а значение уже существует. Когда вы выделяете переменную, вы резервируете часть памяти - пока вы ее не перезапишете, эта память будет содержать любую "случайную" информацию раньше.
Как метафора, подумайте о том, чтобы выделить такую переменную, как покупка участка земли - пока вы что-нибудь с ней не сделаете (например, постройте дом), на земле будет только то, что там уже сидит там (как старый рушившийся дом).
Некоторые языки автоматически заполнят вновь назначенные переменные нулями - это требует времени. В более "самодельных" языках, таких как C, это дополнительное поведение не является гарантированным (хотя в некоторых системах память очищается независимо от языка, например, в качестве меры безопасности)
Память используется и используется повторно в разных точках приложения. Например, по мере того как стек вызовов вашего приложения растет и сжимается, одно и то же место в памяти может быть перезаписано много раз. Следует помнить, что, поскольку часть памяти заброшена, она не обнуляется, поэтому, если вы не укажете новое начальное значение для этого места в памяти при повторном использовании, вы получите старое значение "мусора".
Некоторые языки и реализация структуры делают по умолчанию инициализацию памяти, поскольку она используемый. Другие этого не делают, поэтому важно внимательно прочитать документацию на своем языке, чтобы знать, чего ожидать.
Когда мы создаем переменную и не инициализируем ее, ничего не происходит. Когда вы читаете значение из этой переменной, вы получаете данные из памяти, где теперь находится переменная. Это может выглядеть как мусор/случайное значение только потому, что переменные помещаются в память с некоторой степенью случайности.
Никто явно не назначает значение grabage. Если вы создаете переменную, определяется только местоположение переменной, а не ее значение. Вот почему мы его инициализируем. Значение мусора может быть связано с некоторыми предыдущими операциями над той же памятью старыми процессами! Таким образом, он может держать что угодно. Я думаю, что это относится к довольно хорошему числу языков. Я не уверен в списке!:)
Стандарты C говорят:
Реализация: подробное рассмотрение реализации по адресу: fooobar.com/info/9434/... Резюме:
.bss