Por que os erros de acesso à memória na máquina de 64 bits apontam para um endereço de 32 bits?

-1

Provavelmente, cada uma pelo menos uma vez na vida útil do computador passou por um erro como Violação de acesso à memória em 0x8231d13f que informa o endereço de 32 bits na memória em que ocorreu a violação. Vamos dizer que temos 8 GiB de RAM. A questão é: por que em máquinas de CPUs de 64 bits esses erros de violação ainda endereçam o valor de 32 bits e não o de 64 bits (por exemplo, 0x1934a8bb34cf1200)? Se o computador ainda usa 32 bits, então como ele pode acessar endereços quando recebemos mais de 4GiB de RAM (o que pode armazenar mais de 2 ^ 32 endereços)?

Primeiro, achei que poderia ter algo a ver com a largura do barramento de endereços , mas li que as arquiteturas atuais da AMD têm essas linhas de largura de 48 bits.

    
por kozooh 23.05.2018 / 18:08

1 resposta

2

Coisas assim:

não são fornecidos pelo sistema operacional. Cabe ao próprio programa capturar erros e exibir informações significativas sobre erros.

Se o erro estiver em um executável de 32 bits, capturado por um manipulador de exceção de 32 bits, então não há nada que o diálogo de erro possa fazer, mas mostre um endereço de 32 bits para o erro localização.

Se chegar longe o suficiente para que o sistema operacional tenha que intervir no processo devido a uma violação de acesso, é provável que ele não faça nada, ignore a solicitação que causou um erro, retorne o código de erro relevante para o aplicativo e espere < em> para lidar com a saída de uma mensagem de erro. Este não é um recurso no nível do sistema operacional. Isso é inteiramente da competência do aplicativo.

Se o programa fosse um executável de 64 bits, com tratamento de exceções ciente de 64 bits então esperaria ver um endereço longo na janela de erro.

Mas até mesmo mostrar esse tipo de informação em uma caixa de diálogo é, na melhor das hipóteses, inútil e inútil. Quando você mostra essa informação, ela está basicamente além do ponto de não retorno. Alguns dados foram perdidos, algum estado crítico não tratado ocorreu e é provável que você tenha perdido o que estava fazendo.

Mostrando qualquer endereço de informações de erro para um usuário final está mexendo enquanto Rome queima. Não há nada que o usuário possa fazer a respeito, é provável que o endereço seja diferente a cada invocação, e seja apenas ruído na caixa de diálogo. Você pode também apenas dizer "Desculpe, algo ruim aconteceu e estamos saindo" e deixar por isso mesmo.

    
por 23.05.2018 / 18:36