почему IntPtr.size равен 4 на Windows x64? - PullRequest
16 голосов
/ 09 февраля 2012

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

Ответы [ 4 ]

20 голосов
/ 09 февраля 2012

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

15 голосов
/ 09 февраля 2012

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

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

10 голосов
/ 03 декабря 2013

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

1 голос
/ 09 февраля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...