【问题标题】:why IntPtr.size is 4 on Windows x64?为什么 IntPtr.size 在 Windows x64 上为 4?
【发布时间】:2012-03-01 15:57:51
【问题描述】:

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

【问题讨论】:

标签: c# pinvoke


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      除了上面的答案,即使你选择了 Any CPU architecture,VS2013 在项目属性中还有一个新的选项,叫做“Prefer 32-bit”。您必须在 64 位开发机器上关闭它才能获得 IntPtr.Size = 8。

      【讨论】:

        【解决方案4】:

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

        更多建议:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-03-14
          • 1970-01-01
          • 1970-01-01
          • 2014-08-24
          • 2013-07-10
          • 2013-09-24
          • 2011-05-02
          • 1970-01-01
          相关资源
          最近更新 更多