【发布时间】:2015-05-05 02:09:28
【问题描述】:
我阅读了一些关于调试器的代码,但我对代码用于定义内存地址的变量感到困惑。有时使用DWORD,有时使用LPVOID,谁能告诉我为什么windows使用LPVOID来定义地址?
【问题讨论】:
-
不,它从不使用 DWORD 来表示地址。这当然不适用于 64 位版本,8 字节地址无法容纳 4 字节变量。所以我想这解释了为什么它使用 LPVOID。
我阅读了一些关于调试器的代码,但我对代码用于定义内存地址的变量感到困惑。有时使用DWORD,有时使用LPVOID,谁能告诉我为什么windows使用LPVOID来定义地址?
【问题讨论】:
LPVOID 在所谓的“匈牙利”表示法中的意思是“指向 void 的长指针”,即void far *。后者起源于 16 位代码,现在已经没有意义了。所以,LPVOID 现在和void * 一样,但为了兼容性,名称仍然保持不变。
【讨论】:
我的猜测是,不能保证指针值适合 DWORD(例如,在 64 位操作系统上)
在 Windows 中,一个 DWORD 是 explicitly 一个 32 位整数。 LPVOID 值是明确的指针大小。
【讨论】: