Visual Studio'daki “32 bit tercih et” ayarının amacı nedir ve gerçekte nasıl çalışır?


204

Resim açıklamasını buraya girin

Derleyicinin gerektiğinde 64 bit için otomatik olarak nasıl derleneceğini bileceği açık değil. 32-bit'i ne zaman güvenle hedefleyebileceğini nasıl bilebilir?

Derleyicinin derlerken hangi mimariyi hedefleyeceğini nasıl bildiğini merak ediyorum. Kodu analiz eder ve bulduklarına göre karar verir mi?



Ah teşekkürler. Daha önce görmedim. Hala derleyicinin hangi mimariyi hedefleyeceğini otomatik olarak nasıl bildiğini merak ediyorum. Herhangi bir fikir?
Aaron

Yanıtlar:


219

Microsoft'un bir blog girdisi vardır AnyCPU .NET 4.5 ve Visual Studio 11'den Gerçekten Ne Demektir :

.NET 4.5 ve Visual Studio 11'de peynir taşınmıştır. Çoğu .NET projesi için varsayılan değer yine AnyCPU'dur, ancak şimdi AnyCPU'nun birden fazla anlamı vardır. AnyCPU'nun ek bir alt türü vardır: “Varsayılan herhangi bir CPU 32 bit tercih edilir”, bu da yeni varsayılan değerdir (genel olarak, / platform C # derleyici anahtarı için şimdi beş seçenek vardır: x86, Itanium, x64, anycpu ve anycpu32bitpreferred ). AnyCPU'nun "32-Bit" lezzetini kullanırken, anlambilim aşağıdaki gibidir:

  • İşlem 32 bit Windows sisteminde çalışıyorsa, 32 bit işlem olarak çalışır. IL x86 makine koduna derlenmiştir.
  • İşlem 64 bit Windows sisteminde çalışıyorsa, 32 bit işlem olarak çalışır. IL x86 makine koduna derlenmiştir.
  • İşlem bir ARM Windows sisteminde çalışıyorsa, 32 bitlik bir işlem olarak çalışır. IL, ARM makine koduna derlenmiştir.

Bu durumda, “Tercih edilen herhangi bir CPU 32-bit” ve “x86” arasındaki fark sadece şudur: x86 için derlenen bir .NET uygulaması ARM Windows sisteminde çalışmaz, ancak “Herhangi bir CPU 32-bit tercih edilir” uygulaması başarıyla çalıştırılacaktır.


12
+1. Ayrıca, "32-bit'i tercih et" onay kutusu yalnızca .NET 4.5+ yürütülebilir projeler için etkinleştirilir.
Lee Grissom

12
Anycpu32bitspreferred'in bir diğer avantajı, 64 bitte çalışan başka bir .exe'in bu montajı yükleyebilmesidir.
Bruno Martinez

31
Şahsen ben bunu kapatmak için hiçbir Araçlar ayarı ile varsayılan olarak bu ayarlamak korkunç olduğunu düşünüyorum. Daha da kötüsü, kapatılmadığı sürece csproj dosyalarında bulamadığınız için arama yapamazsınız! Muhtemelen çoğu kişi 32 bit Office yükleyen bir x64 makinesinde CPUAny ile Office Otomasyonu uyumsuzlukları nedeniyle eklenmiştir.
Dave

6
@BrianDavidBerman, 32 değerini yanlış olarak ayarladıysanız ancak 64 bitlik bir makinede x64 veya Herhangi bir CPU ayarladıysanız vardır.
Lex Li

6
X86 ve tercih edilen herhangi bir CPU 32 biti arasındaki fark, ikinci durumda, largeaddressaware bayrağının yürütülebilir dosyada ayarlanmış olmasıdır. Bu, 64 bit işletim sisteminde çalışan 32 bit işlemin x86 modunda 2 GB bellek ve tercih edilen herhangi bir CPU 32 bit modunda 4 GB bellek kullanabileceği anlamına gelir.
Nic

7

İşte basit bir cevap:

Uygulama arch.

Not: AnyCPU-32bitPreferred yalnızca .Net 4.5 ve sonraki sürümlerinde kullanılabilir.


2
"32-bit olarak çalışır" ile "WoW64" olarak çalışır arasındaki fark nedir? WoW64 = "Windows64 üzerinde Windows (32-bit)" diye düşündüm ve herhangi bir 32-bit uygulamanın çalışması için gerekliydi.
Peter Cordes

Bunun bir kaynağı var mı? Görünüşe göre her yerde hala varsayılan varsayılan anycpu32bit tercih edilir, bu 64bit windows makinelerde çalışan insanlar için büyük bir fark (çok).
koştu

@RanSagy basitçe yeni bir proje oluşturarak ve kontrol ederek test edebilirsiniz Project -> Properties -> Build tab -> Platform target... ancak AnyCPU-32bitPreferredsadece .Net 4.5 ve sonraki sürümlerinde kullanılabilir olduğunu unutmayın . Bu yüzden varsayılan AnyCPU.
Yousha Aleayoub

Bazı durumlarda benimki gri renkte çıktı; Sadece .net 4.5+ veya .net standart / çekirdek (ya da gerçekten MSBuild 16) ne olduğuna dair bazı belgeler olduğunu umuyordum
Sagy

-1

Sebebi şudur: 64 bit uygulamalarla daha fazla bellek kullanmak istemiyorsanız. Bu, uygulamanız AnyCPU ise 32 bit olarak çalıştırmak istediğiniz anlamına gelir .

Daha fazla eklemek için Visual Studio'daki ayar belirli CLR'yi hedefler:

Visual Studio, CLR'nin 32 bit sürümünü bir x86 bilgisayarına ve 32 bit sürümünü ve CLR'nin uygun 64 bit sürümünü 64 bit Windows bilgisayara yükler. (Visual Studio 32 bit bir uygulama olduğundan, 64 bit bir sisteme yüklendiğinde WOW64 altında çalışır.)

Lütfen 64 bit Uygulamalar ( MSDN ) makalesine bakın .


1
Bunun doğru olduğundan emin değilim. Anladığım kadarıyla, 32 veya 64'ten bağımsız olarak .NET yürütülebilir dosyalarının işlem başına yaklaşık 2 GB ile sınırlı olduğunu anlıyorum.
JP Richardson

1
Cevabımı düzenledi. Ama aradığınız şey buysa emin değilim :)
Peru

2
@Aaron, derleyici esas olarak montajı yüklemenin uygun olup olmadığına karar vermek için bayrağını ayarlar (yani, x64 işleminde yüklenecek yalnızca x86 derlemesini engelle) ve bayraklara dayalı olarak işlemin (yeni EXE için) nasıl başlatılacağını belirler. IL'nin her iki lezzet için de aynı olduğuna inanıyorum.
Alexei Levenkov

1
@JPRichardson Evet haklısın. Ancak .net 4.5'te boyutu artırma seçeneğiniz vardır. bakınız MSDN
Peru

40
@JPRichardson, ne 32 ne de 64 bit. Net yürütülebilir, işlem başına 2GB ile sınırlıdır - her şeyden önce işlem başına adres alanı işletim sistemi düzeyinde kısıtlamadır (32bit işlem için 2/3 + GB ve 64bit için çok daha fazlası), ikinci 32bit sürüm bile olabilir yürütülebilir dosyada "LargeAddressAware" bayrağı ayarlanmışsa 2GB'tan fazla kullanın. Bildiğim tek 2GB kısıtlaması, Int32 aralığıyla (yaklaşık 2GB) sınırlı dizi / ayırma boyutları hakkında.
Alexei Levenkov
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.