Utilizzo della memoria dell'applicazione a 32 bit nel sistema operativo a 64 bit.


13

Se il mio sistema operativo è a 64 bit, le mie applicazioni a 32 bit possono utilizzare la memoria a 64 bit (> 3,5 GB)?

Risposte:


6

Se l'app è a conoscenza di AWE, può utilizzare uno spazio degli indirizzi oltre i 4 GB, sebbene in modo meno efficiente di un'app a 64 bit. È anche possibile che i processi a 32 bit nelle varianti di Windows a 32 bit accedano a più di quanto lo spazio di indirizzi a 32 bit consentirebbe, se PAE è abilitato e il processo è in grado di usarlo.

Un singolo processo a 32 bit (che non è a conoscenza di AWE) è in genere limitato a 3Gb (il primo GB del suo spazio di indirizzi virtuale è riservato all'azione correlata al kernel) ma se si eseguono più processi, saranno in grado di utilizzarne di più in totale (ognuno può utilizzare fino a 3Gb, memoria totale consentita) poiché i loro spazi di indirizzi virtuali non sono condivisi.

Il limite essendo per processo è più utile in un ambiente simile a Unix in cui i servizi tendono ad essere basati su processi anziché su thread (più thread in un processo condividono le risorse dei processi e quindi condividono un singolo spazio di indirizzi virtuale 3Gb) come è più comune sotto Windows (l'avvio di un nuovo processo in Windows è piuttosto costoso, quindi si preferiscono i thread, nella maggior parte degli ambienti Unix l'avvio di un nuovo processo non richiede molto più risorse rispetto all'avvio di un nuovo thread) . Non è molto utile per una macchina che esegue solo SQL Server, ad esempio, poiché sarà solo un processo, quindi colpirà il limite di 3Gb (alcune edizioni possono essere configurate per essere consapevoli di AWE ma non tutte, e il la funzione è prevista per essere rimossa nella prossima versione principale) .

Oltre ai processi a 32 bit in grado di utilizzare più di 3Gb in totale, il sistema operativo sarà in grado di utilizzare qualsiasi memoria inutilizzata per la memorizzazione nella cache del disco, quindi potrebbe non andare sprecato, supponendo che i processi non aprano i file in modo tale come dire al sistema operativo di non preoccuparsi di farlo.


Il processo a 32 bit con il set IMAGE_FILE_LARGE_ADDRESS_AWARE ha un limite di 4 GB, non 3. msdn.microsoft.com/en-us/library/aa366778(VS.85).aspx
Mark Sowul

5

Se l'applicazione utilizza AWE , quindi sì (anche se questo non è limitato ai sistemi operativi a 64 bit). Senza di essa, il processo è ancora limitato a uno spazio di indirizzi di 4 GB.


-1, anche se vero, penso che la risposta parziale sia fuorviante in quanto nessun processo (non AWE) a 32 bit avrà mai 4 GB di RAM disponibili.
pipTheGeek

@pipTheGeek Erroneous: processo a 32 bit con set IMAGE_FILE_LARGE_ADDRESS_AWARE = ​​4 GB disponibili. msdn.microsoft.com/en-us/library/aa366778(VS.85).aspx
Mark Sowul

@Mark - L'avevo dimenticato e ho corretto la mia risposta di seguito. Penso comunque che questa risposta sia incompleta.
pipTheGeek

3

Sorta, a seconda di cosa intendi.

Supponendo che Windows ...

Se il sistema operativo è a 64 bit, per impostazione predefinita un processo a 32 bit ottiene 2 GB di spazio di indirizzi virtuali dell'indirizzo utente. Se l'intestazione PE del file .exe è contrassegnata con il flag IMAGE_FILE_LARGE_ADDRESS_AWARE, il processo otterrà 4 GB di spazio di indirizzi virtuali indirizzabili dall'utente. In entrambi i casi, lo spazio degli indirizzi virtuali del kernel è lo stesso dei processi a 64 bit, poiché è condiviso da tutti i processi. Inoltre, i processi a 64 bit che non impostano il flag IMAGE_FILE_LARGE_ADDRESS_AWARE hanno anche accesso solo a 2 GB di spazio degli indirizzi virtuali dell'utente.

Le cose che senti su speciali flag di avvio, switch da 3 GB, / 3GB o / userva riguardano tutti i sistemi operativi a 32 bit e non si applicano a Windows a 64 bit.

Tutto questo è stato approfondito in modo estremamente dettagliato nella pagina Microsoft Memory Limits for Windows Releases .

La risposta di @David Spillett tocca anche un altro punto: più processi, tutti limitati a 2 GB di spazio utente, possono ancora utilizzare quantità significative di RAM se disponibili, così come la cache dei file.


0

Un processo a 32 bit su un sistema operativo a 32 bit ha uno spazio di indirizzi di 4 GB, di cui 2 GB riservati dal sistema operativo, 2 GB disponibili per il processo.
C'è un interruttore che può essere specificato al sistema operativo (/ 3 GB) che modifica la quantità riservata al sistema operativo a solo 1 GB e consente al processo di avere 3 GB, MA solo se il processo lo dichiara come indirizzo di grandi dimensioni consapevole nei flag dell'eseguibile.

Su un sistema operativo a 64 bit, un processo a 32 bit otterrà 4 GB se è a conoscenza di un indirizzo di grandi dimensioni, altrimenti 2 GB.

Tutto ciò è destinato a processi non AWE. Se il processo è in grado di utilizzare AWE, quindi, come altri hanno già detto, può utilizzare un ampio spazio di indirizzi, ma in modo meno efficiente di un processo a 64 bit.

PAE consente a un sistema operativo a 32 bit di utilizzare più di 4 GB di RAM, tuttavia presenta problemi di compatibilità ed è stato disabilitato in XP da uno dei service pack, quindi è disponibile solo nelle versioni del sistema operativo del server.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.