为什么 'IntPtr.size' 在 Windows 64 位上是 4?

问题描述 投票:0回答:4

我想当我使用IntPtr.Size时我应该得到8。但是,我在装有 Windows 7 x64 的 64 位计算机上仍然得到 4。为什么?

c# pinvoke
4个回答
23
投票

检查你的文件CPU架构,是x86吗?应该是CPU任何/64位


16
投票

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

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


13
投票

除了前面的答案之外,即使您选择了 Any CPU 架构,Visual Studio 2013 在项目属性中也有一个名为“首选 32 位”的新选项。您必须在 64 位开发机器上将其关闭才能获得 IntPtr.Size = 8


1
投票

检查您的构建目标:x86x64任何 CPU

如果您的配置是x86任何CPU,那么intptr可能是4。

更多建议:

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

© www.soinside.com 2019 - 2024. All rights reserved.