在Microsoft API文档中,我查看了VOID、PVOID和LPVOID数据类型,但我不知道它们之间的区别。另外,LP、P、无前缀是什么意思?
我在使用Windows API函数时见过这种数据类型,但不知道它们之间的区别。
LP 前缀是 16 位 8086 时代的一个非常古老的遗留物。当时有两种类型的指针,近指针和远指针(又名“长指针”)。近指针必须引用当前段基址 65536 字节内的内容,而长指针则包含 16 位段基址以形成 20 位完整地址(20 位地址简单地计算为段 * 16 + 偏移量) ).
此时 P 和 LP 是完全的同义词,并且自从迁移到 32 位 x86 平台以来就一直是同义词。 (请注意,80386 实际上支持 48 位远指针,他们根本没有被操作系统设计者接受,他们选择使用平面内存模型,而不是依赖内存管理单元的分页逻辑进行访问控制)。