64 bit işletim sisteminde 32 bitlik bir bellek ne kadar bellek işleyebilir?


86

Windows'ta normal koşullar altında 32 bitlik bir işlem yalnızca 2 GB RAM'e (veya boot.ini dosyasındaki özel bir anahtarla 3 GB'a) erişebilir. 64 bit işletim sisteminde 32 bitlik bir işlem çalıştırırken ne kadar bellek kullanılabilir? Bunu değiştirebilecek özel anahtarlar veya ayarlar var mı?


Yanıtlar:


92

Varsayılan olarak 2 GB. Uygulama geniş adres alanı duyarlıysa (/ LARGEADDRESSAWARE ile bağlantılıysa), 4 GB alır (3 GB değil, bkz. Http://msdn.microsoft.com/en-us/library/aa366778.aspx )

Çoğu uygulama sıfır olmak üzere en üstteki işaretçilerin bitmesine bağlı olduğundan hala 2 GB ile sınırlıdır.


5
Biri süreçlerin neden tam 4 GB'a erişemediğini açıklayabilir mi?
BlueTrin

1
Ne demek istiyorsun? Kendiniz inşa ederseniz, / LARGEADDRESSAWARE bayrağını kullanabilir ve 4GB ile çalışmasını sağlayabilirsiniz, eğer yapmadıysanız, o zaman yapan geliştiricilerin insafına kalırsınız.
SilverbackNet

İşaretçi tehlikeli bir şekilde ikinin tümleyicisi ile yorumlanabileceği için mi?
rosstex

1
Bu haberi - since many application depends on the top bit of pointers to be zeroEğer adresleme düzeni 32 bit kabul veya process.Is o adres alanını geçme ise kullanılmaz anlamına?
RBT

21

4 GB eksi / LARGEADDRESSAWARE ile bağlantı kurarsanız sistem tarafından kullanılan miktar.

Elbette, bu bayrağı ayarlarsanız işaretçi aritmetiği konusunda daha da dikkatli olmalısınız.


-1: Sistem kendisi için 64 bit adresler kullanacaktır, bu nedenle herhangi bir şey çıkarmaya gerek yoktur
Thomas Weller

@ThomasW., Bu doğru değil, en azından Windows için. WOW64, 64-bit sistem çağrıları için hala 32-bit thunks gerektirir. Bkz msdn.microsoft.com/en-us/library/windows/desktop/...
MSN'i

1
605 kB'lik DLL'leri mi kastediyorsunuz? Maalesef, soru daha çok GB bellekle ilgili olduğu için anlayamadım.
Thomas Weller

7
@ThomasW., Bu yüzden "eksi sistem tarafından kullanılıyor" dedim.
MSN

Bilginize Link bu
sefer

14

Pek çok farklı 32 bit uygulamanız varsa, wow64 alt sisteminin bunları 4G'nin üzerindeki bellekte herhangi bir yerde eşleyebileceği gerçeğine kimse değinmiyor gibi görünüyor, bu nedenle yeterli belleğe sahip 64 bitlik bir pencerede çok daha fazla 32 bit uygulama çalıştırabilirsiniz. yerel bir 32 bit sisteme göre.


7
OP'nin sanal bellekten bahsettiği fiziksel RAM'den bahsediyorsunuz. 32 bit sistemlerde bile, sayfa dosyanız yeterince büyük olduğu sürece birçok uygulamayı çalıştırabilirsiniz.
Thomas Weller

8

32 bitlik bir işlem, 64 bit işletim sisteminde hala aynı kısıtlamalarla sınırlıdır. Sorun, bellek işaretçilerinin yalnızca 32 bit genişliğinde olmasıdır, bu nedenle program 32 bitten büyük herhangi bir bellek adresini atayamaz / çözemez.


4
Bu, 32 bitin 4GB alana hitap ettiğini açıkça belirtmiş olsaydınız yararlı olurdu.
Mühendis

4

64-bit işletim sistemi altında tek bir 32-bit işlem 2Gb ile sınırlıdır. Ancak, IMAGE_FILE_LARGE_ADDRESS_AWAREbit setli bir EXE dosyasına derlenmişse , 2 Gb değil 4 GB sınırı vardır - bkz. Https://msdn.microsoft.com/en-us/library/aa366778(VS.85).aspx

Özel önyükleme bayrakları, 3 GB, /3GBanahtarlar hakkında duyduğunuz şeyler veya /uservatümü 32 bit işletim sistemleri hakkındadır ve 64 bit Windows için geçerli değildir.

Daha fazla ayrıntı için https://msdn.microsoft.com/en-us/library/aa366778(v=vs.85).aspx adresine bakın.

32 bit işletim sistemlerinde olduğu gibi, inancın tersine, 32 bit işletim sistemleri için 4 GB fiziksel sınır yoktur. Örneğin, Microsoft Windows Server 2008 32 bit gibi 32 bit Sunucu İşletim Sistemleri 64 GB'a kadar erişebilir(Windows Server 2008 Enterprise ve Datacenter sürümleri) - İlk olarak Intel tarafından Pentium Pro'da ve daha sonra AMD tarafından Athlon işlemcide tanıtılan Fiziksel Adres Uzantısı (PAE) aracılığıyla - üç seviyeli bir sayfa tablosu hiyerarşisini tanımlar, her biri 32 yerine 64 bitlik tablo girişleriyle bu CPU'ların 4 gigabayttan daha büyük bir fiziksel adres alanına doğrudan erişmesine izin verir - bu nedenle teorik olarak 32 bit işletim sistemi teorik olarak 2 ^ 64 bayta veya 17.179.869.184 gigabayta erişebilir, ancak segment 4 GB ile sınırlıdır. Bununla birlikte, pazarlama nedenlerinden dolayı, Microsoft, sunucu olmayan işletim sistemlerinde yalnızca 4 GB veya hatta etkin bir şekilde 3 GB ile sınırlı maksimum erişilebilir belleğe sahiptir. Bu nedenle, tek bir işlem 32 bit işletim sisteminde 4 GB'tan fazla erişim sağlayabilir ve Microsoft SQL sunucusu buna bir örnektir.

64-bit Windows altındaki 32-bit işlemlerin, paylaşılan çekirdeğin sanal adres alanını ( sistem alanı da denir ) kullanmadaki 64-bit işlemlere kıyasla herhangi bir dezavantajı yoktur . 64-bit Windows altındaki tüm işlemler, ister 64-bit ister 32-bit olsun, aynı 64-bit sistem alanını paylaşır.

Göz önüne alındığında sistem uzay süreç genelinde paylaştırılır üzerine, 32-bit Windows , (iş parçacığı, semafor, dosyalar, vb gibi) kolları büyük miktarda yarattığı işlemleri çekirdek nesneler tarafından sistem alanı tüketmek ve hatta bellek yetersiz çalıştırabilirsiniz toplamda çok fazla bellek varsa. Buna karşılık, 64 bit Windows'ta çekirdek alanı 64 bittir ve 4 GB ile sınırlı değildir. 32 bit uygulamalar tarafından yapılan tüm sistem çağrıları , kullanıcı modunda yerel 64 bit çağrılara dönüştürülür .


1
Bu soru, tek bir işlemin ne kadar belleğe erişebileceğini soruyor . Bu, 32 bit sanal bellek adres alanı ile sınırlıdır. PAE kullanan 32 bit işletim sistemi ile bile aynı bilgisayarda her biri 4 GB kullanan birden fazla 32 bit işleminiz olabilir . Ama bu sorunun sorduğu bu değil .
Peter Cordes

@PeterCordes - üzgünüm ve teşekkür ederim - 2GB / 4GB sınırıyla ilgili cevabı güncelledim.
Maxim Masiutin

@PeterCordes, yorumunuz için teşekkür ederim, yanıtı, birden fazla 32 bit işlemin aynı bilgisayarda, PAE kullanan 32 bit işletim sistemi ile bile 4 GB kullanabileceğini ve 64-bit'in altında 32 bit işlemlerin kullanılabileceğini vurgulamak için güncelledim. bit işletim sistemi, 32-bit işletim sistemi altında bir sorun olan 2GB sistem alanı sınırlamasından muzdarip değildir.
Maxim Masiutin

-1

Win64 altında 32 bitlik bir işlem çalıştırırken aynı temel kısıtlamaya sahipsiniz. Uygulamanız Win32 gibi görünmek için elinden gelenin en iyisini yapan bir 32 ancak alt sistemde çalışıyor ve bu, işleminiz için bellek kısıtlamalarını içerecektir (sizin için daha düşük 2 GB, işletim sistemi için en yüksek 2 GB)


-11

Limit, 32bit için 2g veya 3gb değildir.

İnsanların 3 gb olduğunu düşünmesinin nedeni, işletim sisteminin gerçekten 4 gb sistem ramına sahip olduklarında 3 gb'yi ücretsiz göstermesidir.

Toplam RAM'i 4 gb'dir. Dolayısıyla, 32bit işletim sistemi tarafından görüntülenen toplam ramın bir parçası olarak sayılan 1 gb'lik bir ekran kartınız varsa.

4 Değil 3 değil 2 anlamadın mı?


2
Bu yanlış. Standart bir x86 sistemi için (bellek uzantısı yok), çekirdek tam 4 GiB bellek alanına erişebilir (bilgisayarda sayfalama nedeniyle yalnızca 1GiB ram bulunsa bile). Çekirdek, kendi kullanımı için üst 2GiB'yi (bazı çekirdekler bunun yerine 1GiB veya 3GiB ayırır) ayırır. Her işlemin sanal belleği aynı zamanda çekirdeğin ayrılmış belleğini eşleştirmiştir ve bu nedenle işlem 2GiB bellek kullanamaz.
Alex Jorgenson

3
Ayrıca, video kartlarının bir işlemin kullanabileceği bellek miktarıyla ilgisi yoktur. ACPI tabloları, bellek eşlemeli GÇ, vb. Fiziksel bellek adreslerini kullanır, ancak bu sanal bellek sayesinde önlenir.
Alex Jorgenson

1
Bu yanlış. Microsoft , Windows NT ile Sanal 32 bit adres alanını bölmeyi seçti (tasarım seçimi), öyle ki 2 GB işletim sistemi (sürücü / API / sistem çağrıları vb.) Ve kalan 2 GB Uygulama kullanımı için ayrıldı. / 3GB önyükleme anahtarı bu davranışı değiştirir (işletim sistemi eşlemesi için 1 GB, uygulama kodu için 3 GB). Okuyucu için bir alıştırma olarak eski Windows NT 3.x sanal bellek mimarisi belgelerini bulmayı bırakıyorum :-)
ripvlan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.