Почему IntPtr.size - 4 на Windows x64?

Я думаю, мне нужно получить 8, когда я использую IntPtr.Size. Однако я все еще получаю 4 на x64 машине с Widnows 7 x64, почему?

Ответ 1

проверить свою архитектуру процессора файла, это x86? Он должен быть CPU any/64bit

Ответ 2

64-разрядная операционная система реализует эмуляцию среды, называемую WOW64, которая эмулирует 32-битную среду Windows. Вы создаете свою целевую программу x86, т.е. 32 бит. Это означает, что ваш процесс работает под эмулятором как 32-битный процесс, и, конечно, указатели имеют ширину 4 байта.

Если вы измените свои параметры на целевые x64 или AnyCPU, размер указателя будет равен 8 байтам, когда ваш процесс будет запущен в 64-разрядной системе.

Ответ 3

В дополнение к вышеприведенным ответам, даже если вы выбрали любую архитектуру ЦП, VS2013 имеет новую опцию в свойствах проекта, называемых "Предпочитаю 32-бит". Вы должны отключить его на 64-разрядных машинах разработки, чтобы получить IntPtr.Size = 8.

Ответ 4

Проверьте цель сборки: x86/x64 или любой процессор Если ваша конфигурация - x86 или любой процессор, то, возможно, intptr может быть 4.

Больше предложений:

Если у вас нет требования для запуска вашей программы в режиме x64, пожалуйста, не изменяйте цель сборки на x64, потому что режим x64 оказывает негативное влияние как на производительность, так и на использование пространства. Я забыл ссылку на оригинальную статью на MSDN, но главная причина заключается в увеличении размера ptr и нагрузки GC, вы можете искать эту статью.