P4WN3R Asked: 2023-09-17 06:11:58 +0800 CST2023-09-17 06:11:58 +0800 CST 2023-09-17 06:11:58 +0800 CST 之间的区别:VOID、PVOID、LPVOID [重复] 772 在Microsoft API文档中,我查看了VOID、PVOID和LPVOID数据类型,但我不知道它们之间的区别。另外,LP、P、无前缀是什么意思? 我在使用Windows API函数时见过这种数据类型,但我不知道它们之间的区别。 winapi 1 个回答 Voted Best Answer SoronelHaetir 2023-09-17T06:53:33+08:002023-09-17T06:53:33+08:00 该LP前缀是 16 位 8086 时代的一个非常古老的遗留物。当时有两种类型的指针,近指针和远指针(又名“长指针”)。近指针(P前缀)必须引用当前段基址 65536 字节内的内容,而长指针(LP前缀)则包含 16 位段基址以形成 20 位完整地址(20 位地址的计算简单)作为segment*16 + offset)。 自从转向 32 位 x86 平台后,P类型LP就完全是同义的(请注意,80386 实际上支持 48 位远指针,他们根本就没有受到操作系统设计者的欢迎,他们选择使用平面内存模型,并且相反,依赖内存管理单元的分页逻辑进行访问控制)。
该
LP
前缀是 16 位 8086 时代的一个非常古老的遗留物。当时有两种类型的指针,近指针和远指针(又名“长指针”)。近指针(P
前缀)必须引用当前段基址 65536 字节内的内容,而长指针(LP
前缀)则包含 16 位段基址以形成 20 位完整地址(20 位地址的计算简单)作为segment*16 + offset
)。自从转向 32 位 x86 平台后,
P
类型LP
就完全是同义的(请注意,80386 实际上支持 48 位远指针,他们根本就没有受到操作系统设计者的欢迎,他们选择使用平面内存模型,并且相反,依赖内存管理单元的分页逻辑进行访问控制)。