Różnice między 32 A 64-bit.NET 4) wnioski

Jakie są różnice między aplikacjami 32 i 64-bitowymi. NET (4)?

Często aplikacje 32-bitowe mają problemy z uruchomieniem na maszynach 64-bitowych i odwrotnie. Wiem, że mogę zadeklarować liczbę całkowitą jako int32 i int64 (z pewnością int64 na systemach 32-bitowych sprawia problemy). Czy istnieją inne różnice między programowaniem aplikacji 32 lub 64-bitowej lub aplikacji kompatybilnej z 32 i 64-bitową?

Author: Peter Mortensen, 2010-08-22

3 answers

Niektóre różnice:

  1. 32-aplikacje bitowe i 64-bitowe mogą ładować biblioteki DLL tylko o tej samej bitowości. Może to być problem dla zarządzanych projektów, jeśli docelową platformą jest "dowolny procesor" i odwołujesz się lub P/wywołaj 32-bitowe natywne biblioteki DLL. Problem pojawia się, gdy program "Any CPU" działa na 64-bitowej maszynie, ponieważ aplikacja działa jako proces 64-bitowy. Gdy spróbuje załadować 32-bitową natywną zależność DLL, wyrzuci wyjątek (BadImageFormatException) i prawdopodobnie crash.

  2. Istnieją również problemy z systemem plików i rejestrem. Proces WOW64 , który próbuje odczytać z C:\Program Files, zostanie przekierowany do C:\Program Files (x86), chyba że najpierw wyłączy przekierowanie systemu plików Windows (zobacz Wow64DisableWow64FsRedirection). W przypadku wersji systemu Windows przed Windows 7 występowały również problemy z odbiciem rejestru, które były podobne do problemów z przekierowaniem systemu plików wymienionych powyżej. Artykuł MSDN odbicie rejestru wyjaśnia to cóż.

  3. Typy specyficzne dla platformy, takie jak IntPtr, będą miały różne rozmiary. Może to być problem w kodzie, który przyjmuje stały rozmiar (serializacja, marshaling).

  4. Istnieją oddzielne fizyczne Katalogi dla plików 32 - i 64-bitowych w GAC. Dla mojego systemu są na C:\Windows\Microsoft.NET\assembly\GAC_32 i C:\Windows\Microsoft.NET\assembly\GAC_64.

  5. Rozmiar wirtualnej przestrzeni adresowej aplikacji 32-i 64-bitowych jest różny. W przypadku aplikacji 32-bitowych rozmiar wynosi 2 GB (domyślnie) lub 3 GB (z 4GT włączone). W przypadku aplikacji 64-bitowych rozmiar wynosi 8 TB. 32-bitowa przestrzeń adresowa może być ograniczeniem dla bardzo dużych aplikacji.

  6. Trochę bardziej niejasne, ale wiele wywołań Interprocess Win32 nie będzie działać pomiędzy 32 - i 64-bitowym procesem. Na przykład 32-bitowy proces może się nie udać podczas próby wywołania ReadProcessMemory W 64-bitowym procesie. To samo dotyczy WriteProcessMemory, EnumProcessModules, i wiele podobnych metod. Można to zobaczyć w aplikacjach C#, jeśli spróbuj wyliczyć moduły aplikacji 64-bitowej z aplikacji 32-bitowej, używając System.Diagnostics.Process.Modules API.

 29
Author: Chris Schmich,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-23 17:35:10

Ogólnie uważam, że nie powinieneś mieć żadnych problemów z kodem zarządzanym.

Potencjalne problemy mogą wynikać z niezarządzanego kodu. Na przykład, ponieważ zmienne wielkości są różne w systemach 32-bitowych i 64-bitowych, wskaźniki są różne, itp. Na przykład wielkość zmiennej int w C/C++ zależy od systemu. Jeśli chodzi o kod zarządzany, jak już wspomniano, WoW poradzi sobie z tym.

 3
Author: Incognito,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-23 17:39:50

Kod zarządzany przez x64 będzie używał Streaming SIMD Extensions (SSE) do obliczania podwójnego/zmiennoprzecinkowego zamiast X87 Jednostka zmiennoprzecinkowa (FPU) Podczas używania kodu zarządzanego przez x86.

 2
Author: Avlin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-15 09:04:10