Când un proces Windows nu are memorie?

În Windows Server 2003, Enterprise Edition, SP2 (/ 3GB switch nu este activat)

Așa cum am înțeles și am greșit, memoria maximă adresabilă pentru un proces este de 4 GB.

Sunt 2GB de octeți privați și 2GB de octeți virtuali?

Aveți erori "în afara memoriei" atunci când se atinge limita octetului privat sau limita virtuală de byte?

2

6 răspunsuri

Este corect că spațiul maxim de adrese al unui proces este de 4 GB, într-un anumit sens. Jumătate din spațiul de adrese este, pentru fiecare proces, preluat de sistemul de operare. Acest lucru poate fi schimbat cu comutatorul de 3 GB, dar ar putea provoca instabilitatea sistemului. Deci, am rămas cu 2 GB de memorie adresabilă pentru ca procesul să poată fi utilizat singur. Ei bine, nu în întregime. Se pare că o parte din acest spațiu este preluat de alte chestii, cum ar fi DLL-uri și un alt cod comun. Memoria reală disponibilă pentru dvs. ca programator este de aproximativ 1,5 GB - 1,7 GB.

Nu sunt sigur cum puteți face față accidental depășirea acestei limite, dar știu de jocuri care se prăbușește în mari hărți multiplayer din acest motiv. Un alt lucru care trebuie luat în considerare este că un program de 32 de biți nu poate utiliza mai mult decât spațiul de adrese de 2 GB pe un sistem de 64 de biți, cu excepția cazului în care acestea permit semnalizarea/LARGEADDRESSAWARE: YES linker.

4
adăugat

Memoria maximă adresabilă pentru o mașină pe 32 de biți este de 4 GB, pentru o mașină pe 64 de biți puteți să adresați încărcări mai mult. (Deși unele mașini pe 32 de biți au sisteme de extensie pentru a accesa mai mult, dar nu cred că merită să ne deranjeze sau să luăm în considerare utilizarea acestora).

Ieșiți din erorile de memorie când se atinge limita virtuală. În Windows Server 2003, managerul de activități vă spune limita pentru fila de performanță numită "Commit Charge Limit".

0
adăugat

Următorul link îl explică mult mai bine decât am putut vreodată:

MSDN - Inside Out CLR: Investigarea problemelor de memorie

0
adăugat

Pe 32 de biți, dacă există suficientă memorie fizică și spațiu pe disc pentru memoria virtuală, memoria se epuizează în jur de 3 GB, deoarece nucleul își rezervă spațiul de adresă deasupra 0xC0000000 pentru el însuși. Pe un kernel de 64 de biți care rulează o aplicație de 64 de biți, limita este de 8TB.

For more details, check out MSDN - Memory Limits for Windows Releases

0
adăugat

Mark Russinovich started a series of posts on this.. Pushing the Limits of Windows: Physical Memory

În timp ce 4 GB este limita licențiată pentru SKU-urile client pe 32 de biți, limita efectivă este de fapt mai mică și depinde de chipset-ul sistemului și de dispozitivele conectate. Motivul este că hărțile de adrese fizice includ nu numai memoria RAM, ci și memoria dispozitivului, iar sistemele x86 și x64 hărțesc toată memoria dispozitivului sub limita de adrese de 4 GB pentru a rămâne compatibile cu sistemele de operare pe 32 de biți care nu știu cum să se ocupe adrese mai mari de 4 GB. Dacă un sistem are o memorie RAM de 4 GB și dispozitive, cum ar fi adaptoare video, audio și de rețea, care implementează ferestre în memoria dispozitivului, care se ridică la 500 MB, 500 MB din memoria RAM de 4 GB se vor situa deasupra limitei de adrese de 4 GB.

0
adăugat

Puteți accesa numai 2 GB de memorie în total (fără comutatorul 3Gb) pe platforme Windows 32bit.

Aveți posibilitatea să executați mai multe VM 32bit pe un sistem de operare pe 64 de biți, astfel încât fiecare aplicație să aibă acces la cât mai multă memorie posibilă dacă aparatul dvs. are mai mult de 4Gb.

O mulțime de oameni au început să lovească aceste bariere, cred că este mai ușor dacă aplicația dvs. este în .net sau Java, deoarece VM-urile merg în mod fericit până la 32 GB de memorie pe 64 biti.

0
adăugat