2012-08-09 10 views
25

Memory Limits for Windows Releases risposte quella che è la quantità massima di memoria ogni singolo processo in Windows può risolvere:La quantità massima di memoria ogni singolo processo in Windows può risolvere

Nelle versioni a 32 bit di Windows, un singolo processo può mappa e indirizzo no più di 3 GB di memoria virtuale alla volta. Nelle versioni a 64 bit di Windows, un processo a 32 bit può mappare e indirizzare non più di 4 GB di memoria virtuale alla volta.

Per i processi a 64 bit, l'importo è difficile da calcolare in quanto i limiti di sovrapposizione sono numerosi a seconda di tutti i tipi di fattori . In genere è di circa 7 TB.

La mia domanda: come verificare valori come "3 GB", "4 GB" ecc.?

Possiamo scrivere un codice C# per dimostrarlo? C'è un metodo per questo?

Grazie.

+0

l'approccio ingenuo (leggi anche: abbastanza buon approccio): avviare l'allocazione della memoria fino ad ottenere un'eccezione OutOfMemory. –

+1

Il limite di 3 GB è solo sui sistemi che sono configurati per esso, solo sui processi che sono configurati per esso, e danneggia le prestazioni del kernel. Solitamente ottieni solo 2 GB. – Dani

risposta

27

Mark Russinovich ha pubblicato una serie in più parti su risorse di memoria Windows che copre molto bene questo aspetto. Puoi trovarlo qui: http://blogs.technet.com/b/markrussinovich/archive/2008/07/21/3092070.aspx

Egli copre i motivi per cui i limiti sono quello che sono, così come i test. Il codice per i test è fluttuante nei tubi da qualche parte.

Se si desidera conoscere le risorse di memoria e i problemi che si possono verificare perdendo i vari tipi, è una buona lettura.

Ma, in breve, 32 bit su sistema operativo a 32 bit: 2 GB, a meno che non sia impostato su ampio spazio di indirizzi, nel qual caso 3 GB. 32 bit su sistema operativo a 64 bit: 2 GB, a meno che non sia impostato su ampio spazio di indirizzi, nel qual caso 4 GB.

Processo a 64 bit: 2 GB, a meno che non sia impostato su ampio spazio di indirizzi, nel qual caso potrebbe indirizzare fino a 8 TB, a meno che non sia ospitato su un sistema Intel Itanium limitato a 7 TB.

Microsoft afferma i vari limiti (da sapori e tipologie) a: http://msdn.microsoft.com/en-us/library/aa366778.aspx

1

È possibile scrivere un tipo di loop in un'app console per verificarlo.

Forse creare una stringa che è esattamente 1MB e passare attraverso un processo di concatenazione per aumentarne le dimensioni fino a ottenere un errore ... Stack Overflow.

Su ogni iterazione WriteLine la dimensione o il numero di iterazioni.

EDIT

Aggiungerei, poiché STRING è immutabile (nonostante tecnicamente essere un tipo di riferimento) da utilizzare OGGETTO

Edit Due

Trisped rileva che una stringa inscatolato in un oggetto è ancora immutabile.

Creazione di una matrice di byte [1024] dovrebbe fare il trucco.

+1

Devo regolare anche la dimensione della memoria virtuale? –

+0

Vorrei solo ridurre la quantità di variabili sconosciute da tenere in considerazione. – Wesley

+0

Quindi stai suggerendo di creare un array x MB in lato, quindi creare un nuovo array x + 1 MB di dimensioni dove verranno copiati nel primo array più un altro array, e lo faranno in un ciclo? Faresti meglio a creare una matrice della dimensione desiderata, se funziona, elimina l'array e creane uno nuovo. Questo sarebbe meglio in C++ però. Anche l'oggetto – Trisped

Problemi correlati