2009-02-20 18 views
8

Anladığım kadarıyla, 32 bitlik bir işlem,/3GB anahtarı olmaksızın 32 bit pencerelerde 2GB belleğe erişebiliyor ve bu belleğin bir kısmı kendi mantıksal nedenlerinden ötürü işletim sistemi tarafından ele alınabiliyor. Bu, hala bellek yeterli olsa bile, bellek dışında istisnalar dışında 1.2 - 1.5 GB RAM'e ulaştığında çökeren bir uygulamaya sahip olduğumuzdan, bu benim deneyimlerime göre ağlıyor gibi görünüyor.32bit işlem 64bit Windows işletim sisteminde daha fazla belleğe erişebilir mi?

Sorum şu ki, bu 32bit uygulamasını 64 bit pencereye taşıyarak 1,5 GB'a veya daha fazla belleğe erişebiliyor mu? Veya uygulamanın kendisi 64bit'e yükseltilmeli mi?

+0

Yani, 32 bitlik bir işaretçinin önerebileceği tam 4 Gb'ye erişebilir mi? Bazı çalışmalarda kesinlikle 4 Gb'den daha fazlasını ele alamıyor, ancak 32-bit Windows altında yapabileceğinden daha fazlasını kullanıp kullanamayacağımı kendim görmek isterdim. – erickson

cevap

12

Visual Studio'nun daha yeni sürümlerinde, 32 bit uygulamalar "büyük adres alanı farkında" yapan yeni bir bayrak var. Temel olarak, Windows 64 bit sürümüne yüklendiğinde, 4GB (32 bitlik işaretçi sınırı) alacağı söylenir. Bu, windows'un 32 bit sürümlerinde aldığınız 2 veya 3 GB'den kesinlikle daha iyidir. http://msdn.microsoft.com/en-us/library/aa366778.aspx bakınız:

En kayda değer şu şekilde olur: bellek ve adres alanı üzerinde

sınırlamalar platforma, işletim sistemi, tarafından olup olmadığını ımage_fıle_large_address_aware LOADED_IMAGE yapısının değerini ve 4 gigabayt göre değişir ayar (4GT) kullanımda. IMAGE_FILE_LARGE_ADDRESS_AWARE olarak ayarlanmış veya /LARGEADDRESSAWARE linker seçeneğini kullanarak temizlenmiştir.

Ayrıca bakınız: http://msdn.microsoft.com/en-us/library/wz223b1z.aspx

1

Uygulamanız, örnek 32 bit'de, işaretçi boyutuyla sınırlı olacaktır.

Uygulamanız daha fazla belleğe erişmekse, uygulamaların 16 bit işaretçilerle 16 bitlik işaretçi ve ofsetlerin 32 bit bellek alanına erişmesi için kullandığımız gibi bir tür bölümlenmiş bellek mimarisine gereksiniminiz olacaktır.

1

WOW64'ni gerçek 64 bit işaretçileri, 32-bit işaretçileri çeviri, 64 bit Windows üzerinde 32 bit Windows uygulamasını kullanarak verir. Ve aslında 32 bit adresleme 4GB belleğe erişime izin vermelidir.

+0

32 bit kod çalışırken, 32 bit işaretçilerden 64 bit'e çeviri yoktur. WOW64 sadece 64 bit kodun içine ve dışına geçiş yaparken devreye girer. –

4

Evet, doğru koşullarda, Windows'taki 32 bitlik bir işlem, normal olarak sınırlı olan 2 GB yerine 4 GB'lık bir belleğe erişebilir. uygulama app/LARGEADDRESSAWARE bayrağıyla derlenmesi gerekir 64-bit OS

  • çalışıyor olması gerekir

    • :

      Bunun işe yaraması için

      , aşağıdakiler gereklidir.
    • Bu durumda gerçekten düzgün çalıştığından emin olmak için uygulama test edilmelidir. ;) (özellikle, 2GB sınırının altındaki adresleri işaret eden tüm işaretçilere dayanan kod açık bir şekilde işe yaramayacaktır)
  • İlgili konular