-1

Вероятно, каждый из них хотя бы раз в жизни компьютера сталкивался с ошибкой типа нарушения доступа к памяти по адресу 0x8231d13f, которая указывает 32-битный адрес в памяти, где произошло нарушение. Допустим, у нас есть 8 ГиБ оперативной памяти. Вопрос заключается в следующем: почему на 64-битных процессорных компьютерах эти ошибки нарушения по-прежнему связаны с 32-битным значением, а не с 64-битным (например, 0x1934a8bb34cf1200)?Если компьютер по-прежнему использует 32-разрядную версию, то как он может получить доступ к адресам, когда мы получили более 4 ГБ ОЗУ (в котором может храниться более 2 ^ 32 адресов)?

Сначала я подумал, что это может быть связано с шириной линии шины адреса, но я прочитал, что в современных архитектурах AMD эти строки имеют ширину 48 бит.

1 ответ1

2

Такие вещи

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

Если ошибка находится в 32-разрядном исполняемом файле, захваченном 32-разрядным единственным обработчиком исключений, тогда диалоговое окно ошибки ничего не может сделать, кроме как показать 32-разрядный адрес для местоположения ошибки.

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

Если программа была 64-разрядным исполняемой с 64-битной обработкой знает исключений , то я ожидал бы увидеть длинный адрес в окне сообщения об ошибке.

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

Конечный пользователь показывает любой адрес информации об ошибке, а Рим горит. Пользователь ничего не может с этим поделать, есть вероятность, что адрес будет отличаться при каждом вызове, и это просто шум диалогового окна. С тем же успехом вы можете просто сказать: «Извините, что-то плохое случилось, и мы уходим», и оставить все как есть.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .