【问题标题】:What's the point of __ptr32 and __ptr64?__ptr32 和 __ptr64 有什么意义?
【发布时间】:2013-07-22 16:22:48
【问题描述】:

this MSDN article 中所述,Microsoft 有这两种类型注释来声明不同架构上的本机指针。但是,在第二行:

在 32 位系统上,使用 __ptr64 声明的指针被截断为 32 位指针。在 64 位系统上,使用 __ptr32 声明的指针被强制转换为 64 位指针。

在我看来,声明无关紧要;如果架构将 __ptrXX 的声明覆盖为默认值,那么首先标记 __ptrXX 有什么意义?

我看到this answer 说它是用于互操作的,但如果声明基本上如上所述被覆盖,这对互操作有什么帮助?

【问题讨论】:

    标签: pointers visual-c++


    【解决方案1】:

    声明和分配 32 位指针与实际使用它之间存在很大差异。换句话说,取消引用指针。如果您在 64 位进程中执行此操作,则没有其他选择,只能将其符号扩展为 64 位指针。这就是“强迫”的意思。这可能偶然起作用,但你必须非常幸运。尝试是没有意义的。

    声明 __ptr32 的要点如链接答案中所述,仅当您与 32 位进程互操作时才有意义。它使用 32 位指针。这并不常见。

    【讨论】:

    • 强制不会立即发生并且实际上是避免的,这一点很清楚。我很好奇并且对互操作知之甚少:32 位程序实际上是否与 64 位程序互操作? IE。是否会发生相反的情况,还是 __ptr64 只是为了对称/具有理论上的可能性?
    • 根据this__ptr32 始终为 32 位,__ptr64 始终为 64 位,与目标平台无关。 32 位程序仅使用__ptr64 的低 32 位,动态地将 64 位值截断为 32 位值。然而,奇怪的是,编译器并未考虑 T* __ptr32T* __ptr64 不同的类型,尽管它确实识别出大小差异。
    猜你喜欢
    • 2011-02-20
    • 2011-09-26
    • 2010-11-29
    • 2010-10-15
    • 2011-02-05
    • 2012-02-28
    • 2018-01-13
    • 2015-03-18
    • 2018-02-15
    相关资源
    最近更新 更多