Quanta memoria può accedere a un processo a 32 bit su un sistema operativo a 64 bit?


86

Su Windows, in circostanze normali un processo a 32 bit può accedere solo a 2 GB di RAM (o 3 GB con un interruttore speciale nel file boot.ini). Quando si esegue un processo a 32 bit su un sistema operativo a 64 bit, quanta memoria è disponibile? Esistono interruttori o impostazioni speciali che possono modificare questa impostazione?


Risposte:


92

2 GB per impostazione predefinita. Se l'applicazione è in grado di riconoscere lo spazio degli indirizzi di grandi dimensioni (collegata con / LARGEADDRESSAWARE), ottiene 4 GB (non 3 GB, vedere http://msdn.microsoft.com/en-us/library/aa366778.aspx )

Sono ancora limitati a 2 GB poiché molte applicazioni dipendono dal fatto che il bit superiore dei puntatori sia zero.


5
Qualcuno può spiegare perché i processi non possono accedere a 4 GB completi?
BlueTrin

1
Cosa intendi? Se lo costruisci da solo, puoi utilizzare il flag / LARGEADDRESSAWARE e farlo funzionare con 4 GB, se non l'hai fatto, sei alla mercé degli sviluppatori che lo hanno fatto.
SilverbackNet

È perché il puntatore potrebbe essere interpretato pericolosamente con il complemento a due?
rosstex

1
Con questo - since many application depends on the top bit of pointers to be zerointendi che il 32 ° bit dello schema di indirizzamento non viene considerato o utilizzato durante l'attraversamento dello spazio degli indirizzi del processo.
RBT

21

4 GB meno ciò che è utilizzato dal sistema se ci si collega con / LARGEADDRESSAWARE.

Ovviamente, dovresti stare ancora più attento con l'aritmetica dei puntatori se imposti quel flag.


-1: il sistema utilizzerà indirizzi a 64 bit per se stesso, quindi non è necessario sottrarre qualcosa
Thomas Weller

@ ThomasW., Non è vero, almeno su Windows. WOW64 richiede ancora thunk a 32 bit per le chiamate di sistema a 64 bit. Vedi msdn.microsoft.com/en-us/library/windows/desktop/…
MSN

1
Intendi quei 605 kB di DLL? Mi spiace, non ho capito perché la domanda era più sui GB di memoria.
Thomas Weller

7
@ThomasW., Ecco perché ho detto "meno ciò che è utilizzato dal sistema".
MSN

Cordiali saluti Link è morto su questo
jjxtra il

14

Nessuno sembra accennare al fatto che se hai molte diverse applicazioni a 32 bit, il sottosistema wow64 può mapparle ovunque nella memoria sopra 4G, quindi su una finestra a 64 bit con memoria sufficiente, puoi eseguire molte più applicazioni a 32 bit rispetto a un sistema nativo a 32 bit.


7
Stai parlando di RAM fisica, dove l'OP sta parlando di memoria virtuale. Anche su sistemi a 32 bit è possibile eseguire molte applicazioni, purché il file di paging sia sufficientemente grande.
Thomas Weller

8

Un processo a 32 bit è ancora limitato agli stessi vincoli in un sistema operativo a 64 bit. Il problema è che i puntatori di memoria sono larghi solo 32 bit, quindi il programma non può assegnare / risolvere indirizzi di memoria superiori a 32 bit.


4
Ciò sarebbe stato utile se avessi chiarito che 32 bit indirizzano 4 GB di spazio.
Ingegnere

4

Un singolo processo a 32 bit in un sistema operativo a 64 bit è limitato a 2 GB. Ma se è compilato in un file EXE con IMAGE_FILE_LARGE_ADDRESS_AWAREbit impostato, ha un limite di 4 GB, non 2 GB - vedere https://msdn.microsoft.com/en-us/library/aa366778(VS.85).aspx

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

Vedi https://msdn.microsoft.com/en-us/library/aa366778(v=vs.85).aspx per maggiori dettagli.

Per quanto riguarda i sistemi operativi a 32 bit, contrariamente a quanto si crede, non esiste un limite fisico di 4 GB per i sistemi operativi a 32 bit. Ad esempio, i sistemi operativi per server a 32 bit come Microsoft Windows Server 2008 a 32 bit possono accedere fino a 64 GB(Edizioni Windows Server 2008 Enterprise e Datacenter) - tramite Physical Address Extension (PAE), che è stato introdotto per la prima volta da Intel nel Pentium Pro, e successivamente da AMD nel processore Athlon - definisce una gerarchia di tabelle di pagine di tre livelli, con voci di tabella di 64 bit ciascuna invece di 32, consentendo a queste CPU di accedere direttamente a uno spazio di indirizzi fisici più grande di 4 gigabyte - quindi in teoria, un sistema operativo a 32 bit può accedere in teoria a 2 ^ 64 byte, o 17.179.869.184 gigabyte, ma il segmento è limitato da 4 GB. Tuttavia, per motivi di marketing, Microsoft ha limitato la memoria massima accessibile sui sistemi operativi non server a soli 4 GB, o addirittura 3 GB effettivi. Pertanto, un singolo processo può accedere a più di 4 GB su un sistema operativo a 32 bit e il server Microsoft SQL è un esempio.

I processi a 32 bit in Windows a 64 bit non hanno alcuno svantaggio rispetto ai processi a 64 bit nell'utilizzo dello spazio degli indirizzi virtuali del kernel condiviso (chiamato anche spazio di sistema ). Tutti i processi, sia a 64 bit che a 32 bit, sotto Windows a 64 bit condividono lo stesso spazio di sistema a 64 bit.

Dato che lo spazio di sistema è condiviso tra tutti i processi , su Windows a 32 bit , i processi che creano grandi quantità di handle (come thread, semafori, file, ecc.) Consumano spazio di sistema dagli oggetti del kernel e possono esaurire la memoria anche se hai molta memoria disponibile in totale. Al contrario, su Windows a 64 bit , lo spazio del kernel è a 64 bit e non è limitato da 4 GB. Tutte le chiamate di sistema effettuate dalle applicazioni a 32 bit vengono convertite in chiamate native a 64 bit in modalità utente .


1
Questa domanda riguarda la quantità di memoria a cui può accedere un singolo processo . È limitato dallo spazio degli indirizzi della memoria virtuale a 32 bit. Sicuramente puoi avere più processi a 32 bit ciascuno utilizzando 4 GB sullo stesso computer, anche con un sistema operativo a 32 bit che utilizza PAE. Ma non è quello che sta chiedendo questa domanda.
Peter Cordes

@PeterCordes - scusa e grazie - ho aggiornato la risposta sul limite di 2 GB / 4 GB.
Maxim Masiutin

@ PeterCordes, grazie per il tuo commento, ho aggiornato la risposta per sottolineare che più processi a 32 bit possono utilizzare ciascuno 4 GB sullo stesso computer, anche con un sistema operativo a 32 bit che utilizza PAE, e che i processi a 32 bit sotto 64- Il sistema operativo bit non soffre della limitazione dello spazio di sistema di 2 GB, che era un problema con il sistema operativo a 32 bit.
Maxim Masiutin

-1

Hai la stessa restrizione di base quando esegui un processo a 32 bit in Win64. La tua app viene eseguita in un sottosistema 32 ma che fa del suo meglio per assomigliare a Win32 e questo includerà le limitazioni di memoria per il tuo processo (2 GB inferiori per te, 2 GB superiori per il sistema operativo)


-11

Il limite non è di 2g o 3gb, ma di 4gb per 32bit.

Il motivo per cui la gente pensa che sia 3 GB è che il sistema operativo mostra 3 GB liberi quando hanno davvero 4 GB di RAM di sistema.

La sua RAM totale di 4 GB. Quindi, se hai una scheda video da 1 GB che conta come parte della RAM totale visualizzata dal sistema operativo a 32 bit.

4Gig not 3 non 2 capito?


2
Non è corretto. Per un sistema x86 standard (senza estensioni di memoria), il kernel può accedere a tutti i 4 GB di spazio di memoria (anche se il computer ha solo 1GiB di RAM a causa del paging). Il kernel riserva il 2GiB superiore (alcuni kernel riservano 1GiB o 3GiB invece) per il proprio uso. La memoria virtuale di ogni processo ha anche la memoria riservata del kernel mappata e quindi il processo non può utilizzare 2GiB di memoria.
Alex Jorgenson

3
Inoltre, le schede video non hanno nulla a che fare con la quantità di memoria che un processo può utilizzare. Le tabelle ACPI, l'IO mappato in memoria, ecc. Utilizzano indirizzi di memoria fisica, ma ciò viene evitato grazie alla memoria virtuale.
Alex Jorgenson

1
Questo non è corretto. Microsoft ha scelto (scelta del design) di dividere lo spazio degli indirizzi virtuali a 32 bit con Windows NT in modo che 2 GB fossero riservati per la mappatura del sistema operativo (driver / API / chiamate di sistema, ecc.) E 2 GB rimanenti per l'uso dell'app. L'interruttore di avvio / 3 GB modifica questo comportamento (1 GB per la mappatura del sistema operativo, 3 GB per il codice dell'app). Lascio la ricerca della vecchia documentazione dell'architettura della memoria virtuale di Windows NT 3.x come esercizio per il lettore :-)
ripvlan
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.