Вопрос по .net, 64bit, 32-bit – Каковы различия между .NET в 32 или 64-битных системах?

4

Представьте себе чистое приложение .NET, которое не использует ни компоненты COM, ни PInvoke. Имеет ли значение, если целевая система имеет 32 или 64 бита?

дубликат:stackoverflow.com/questions/145026 Mauricio Scheffer

Ваш Ответ

3   ответа
4

P / Invoke и т. Д., Семантической разницы не должно быть, но это может повлиять на производительность. Обратите внимание: больше памяти под 64-битной, но ссылки больше. Выиграй немного, проиграй немного.

Во всяком случае, вот несколько полезных ссылок:

See MSDN: Migrating 32-bit Managed Code to 64-bit. Quote:

"[...] Consider a .NET application that is 100% type safe code. In this scenario it is possible to take your .NET executable that you run on your 32-bit machine and move it to the 64-bit system and have it run successfully. Why does this work? Since the assembly is 100% type safe we know that there are no dependencies on native code or COM objects and that there is no 'unsafe' code which means that the application runs entirely under the control of the CLR. The CLR guarantees that while the binary code that is generated as the result of Just-in-time (JIT) compilation will be different between 32-bit and 64-bit, the code that executes will both be semantically the same. [...]"

Also see Maoni's WebLog : 64-bit vs 32-bit

Also see Scott Hanselman's Computer Zen - Back to Basics: 32-bit and 64-bit confusion around x86 and x64

Теоретически приложение будет работать одинаково, на практике существуют различия в реализации, а также различные ошибки между 32-битными и 64-битными средами. Это не распространено, но это случается. За последние 2 месяца я столкнулся по крайней мере с 3 сценариями, в которых идентичный MSIL ведет себя по-разному при нацеливании на x86 и на AnyCPU в системе x64.
4

который может иметь значение, кроме тех, которые определены Ридом Копси, - это если вы «чисты» приложение использует для чего-то структуру System.IntPtr или использует небезопасный код (который не совпадает с P / Invoke) и арифметику указателей.

Еще одна важная вещь, на которую стоит обратить внимание, это призывы к чему-либо вSystem.Runtime.InteropServices.Marshal учебный класс. Есть все виды удивительных способов выстрелить себе в ногу там (чрезвычайно полезный, когда вам это нужно, конечно).

Хорошие дополнения.
6

поведение во время выполнения будет другим, в частности, использование памяти и ограничения.

На 64-битных не будет тех же 32-битных ограничений памяти (теоретически максимальная память 2 ГБ, но на практике 1.2-1.6). Однако все ссылки на объекты в два раза больше, поэтому 64-битные системы будут использовать больше памяти.

Кроме того, 64-битные системы часто имеют дополнительные регистры и т. Д., Поэтому иногда производительность может немного улучшиться. Это зависит от платформы, хотя.

Если приложение предназначено для x86, оно будет работать под WoW64 и будет действовать почти так же, как и в 32-битных системах.

Похожие вопросы