Я провожу здесь некоторые тесты на своем компьютере, и я понял, что, когда я не инициализирую переменную, ее значение обычно равно 0,
Если переменная со статическимпродолжительность хранения (например, x
) определяется без инициализатора, затем его начальное значение равно 0 (арифметические типы) или нулевому указателю (типы указателей), либо это агрегатный тип, и его члены инициализируются согласно этим правилам(рекурсивно) или это тип объединения, и его первый член инициализируется в соответствии с этими правилами.Это определено в параграфе 6.7.9 / 10 стандарта языка, поэтому в соответствующей соответствующей реализации "имеет тенденцию быть" слишком слабой.
Но обратите внимание, что это не относится кавтоматические переменные (объявленные в области блока и без спецификатора класса хранения).Если автоматическая переменная объявляется без инициализатора, то ее начальное значение является неопределенным, а если вы используете значение такого объекта без предварительной установки, то поведение не определено.Возможно, именно поэтому вы хеджировали.
, но он инициализируется только 0, когда код компилируется в 64 бита,
Если мы говорим о соответствующих реализацияхтогда размер слова целевой архитектуры не имеет к этому никакого отношения.
после некоторых тестов я убедился, что это загрузчик двоичного файла, который заполняет адрес памяти значением 0, а некомпилятор.
Это зависит от реализации.С не указывает.Однако вы пометили реализации ELF и C, которые нацелены на ELF, обычно назначают инициализированные по умолчанию объекты разделу BSS, который в значительной степени предназначен для этой цели.BSS не занимает места на диске, но при загрузке он инициализируется нулевыми битами.
Я хотел бы подтвердить, действительно ли это загрузчик, который устанавливает значение 0, благодарен
Загрузчик программы, в какой бы форме она ни находилась в любой конкретной реализации, устанавливает начальное значение каждой переменной со статической продолжительностью независимо от того, определено ли оно с помощью инициализатора.Это может быть сделано путем загрузки значения с диска или, в некоторых случаях, путем его заполнения нулями без загрузки определенного значения с диска или, возможно, с помощью какого-либо другого механизма.Как уже было описано, для переменных, назначенных разделу BSS объекта ELF, загрузчик (в данном случае динамический компоновщик) заполняет представление нулями.