为什么在Windows x64上IntPtr.size为4?

时间:2012-02-09 06:38:27

标签: c# pinvoke

我认为当我使用IntPtr.Size时我应该得到8。但是我仍然使用Widnows 7 x64在x64机器上获得4个,为什么?

4 个答案:

答案 0 :(得分:20)

检查你的文件CPU架构,是x86吗?它应该是CPU any / 64bit

答案 1 :(得分:15)

64位操作系统实现了一个称为WOW64的模拟环境,它模拟了32位Windows环境。您正在构建针对x86的程序,即32位。这意味着您的进程作为32位进程在模拟器下运行,当然指针是4字节宽。

如果您将选项更改为目标x64或AnyCPU,那么当您的进程在64位系统上运行时,指针大小将为8个字节。

答案 2 :(得分:10)

除上述答案外,即使您选择了任何CPU架构,VS2013在项目属性中都有一个名为"首选32位"的新选项。您必须在64位开发计算机上将其关闭才能获得IntPtr.Size = 8。

答案 3 :(得分:1)

检查您的构建目标:x86 / x64或任何cpu 如果您的配置是x86或任何cpu,则intptr可能是4。

更多建议:

如果您不需要在x64模式下运行程序,请不要将构建目标更改为x64,因为x64模式对性能和空间使用都有负面影响。我忘记了原始文章在MSDN上的链接,但主要原因是增加了ptr大小和GC负担,你可以搜索那篇文章。