Spazio indirizzi virtuale (Guida per programmatori per Windows a 64 bit)

Per impostazione predefinita, le applicazioni basate su Microsoft Windows a 64 bit hanno uno spazio indirizzi in modalità utente di diversi terabyte. Per valori precisi, vedere Limiti di memoria per le versioni di Windows e Windows Server. Tuttavia, le applicazioni possono specificare che il sistema deve allocare tutta la memoria per l'applicazione inferiore a 2 gigabyte. Questa funzionalità è utile per le applicazioni a 64 bit se sono vere le condizioni seguenti:

  • Uno spazio indirizzi da 2 GB è sufficiente.
  • Il codice include molti avvisi di troncamento del puntatore.
  • I puntatori e i numeri interi vengono combinati liberamente.
  • Il codice ha polimorfismo usando tipi di dati a 32 bit.

Tutti i puntatori sono ancora puntatori a 64 bit, ma il sistema garantisce che ogni allocazione di memoria si verifichi al di sotto del limite di 2 GB, in modo che se l'applicazione tronca un puntatore, non vengono persi dati significativi. I puntatori possono essere troncati a valori a 32 bit, quindi estesi a valori a 64 bit tramite estensione del segno o estensione zero.

Per specificare questa limitazione di memoria, usare l'opzione /LARGEADDRESSAWARE:NO linker. Si noti che /LARGEADDRESSAWARE:NO viene ignorato per un file binario ARM64. Tuttavia, tenere presente che i problemi possono verificarsi quando si usa questa opzione. Se si compila una DLL che usa questa opzione e la DLL viene chiamata da un'applicazione che non usa questa opzione, la DLL potrebbe troncare un puntatore a 64 bit i cui 32 bit superiori sono significativi. Ciò può causare un errore dell'applicazione senza alcun avviso.