Почему ошибки доступа к памяти на 64-битной машине указывают на 32-битный адрес?

344
kozooh

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

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

-1
Единственная причина, по которой нарушение доступа к памяти может указывать на 32-разрядный адрес, - это если нарушение памяти происходило в 32-разрядном процессе, поскольку 32-разрядное приложение может обращаться только к 32-разрядным адресам. Ramhound 6 лет назад 0

1 ответ на вопрос

2
Mokubai

Такие вещи

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

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

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

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

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

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

Нет Это сообщение об ошибке предоставляется Windows, в частности обработчиком исключений по умолчанию. Это происходит, когда ни один обработчик исключений в коде приложения не предоставил обработчик исключений, который имел дело с конкретным исключением. Jamie Hanrahan 6 лет назад 0