Share via


Espaço de Endereço Virtual (Guia de Programação para Windows de 64 bits)

Por padrão, aplicativos baseados no Microsoft Windows de 64 bits têm um espaço de endereço no modo de usuário de vários terabytes. Para obter valores precisos, consulte Limites de memória para versões do Windows e do Windows Server. No entanto, os aplicativos podem especificar que o sistema deve alocar toda a memória para o aplicativo abaixo de 2 gigabytes. Esse recurso será benéfico para aplicativos de 64 bits se as seguintes condições forem verdadeiras:

  • Um espaço de endereço de 2 GB é suficiente.
  • O código tem muitos avisos de truncamento de ponteiro.
  • Ponteiros e inteiros são livremente misturados.
  • O código tem polimorfismo usando tipos de dados de 32 bits.

Todos os ponteiros ainda são ponteiros de 64 bits, mas o sistema garante que cada alocação de memória ocorra abaixo do limite de 2 GB, para que, se o aplicativo truncar um ponteiro, nenhum dado significativo seja perdido. Os ponteiros podem ser truncados para valores de 32 bits e estendidos para valores de 64 bits por extensão de sinal ou extensão zero.

Para especificar essa limitação de memória, use a opção de vinculador /LARGEADDRESSAWARE:NO . Observe que /LARGEADDRESSAWARE:NO é ignorado para um binário ARM64. No entanto, lembre-se de que os problemas podem ocorrer ao usar essa opção. Se você criar uma DLL que usa essa opção e a DLL for chamada por um aplicativo que não usa essa opção, a DLL poderá truncar um ponteiro de 64 bits cujos 32 bits superiores são significativos. Isso pode causar falha no aplicativo sem nenhum aviso.