Na documentação da API da Microsoft, examinei os tipos de dados VOID, PVOID e LPVOID, mas não sei a diferença entre eles. Além disso, qual é o significado de LP, P e nenhum prefixo?
Já vi esse tipo de dados ao usar funções da API do Windows, mas não sei a diferença entre elas.
O
LP
prefixo é uma sobra muito antiga dos 8.086 dias de 16 bits. Naquela época, havia dois tipos de ponteiros, próximos e distantes (também conhecidos como "longos"). Um ponteiro próximo (P
prefixo) tinha que referenciar algo dentro de 65.536 bytes da base do segmento atual, enquanto um ponteiro longo (LP
prefixo) incluía uma base de segmento de 16 bits para formar o endereço completo de 20 bits (o endereço de 20 bits foi calculado simplesmente comosegment*16 + offset
).Desde a mudança para plataformas x86 de 32 bits
P
eLP
os tipos são completamente sinônimos entre si (observe que o 80386 na verdade suportava um ponteiro distante de 48 bits eles simplesmente nunca pegaram os designers de sistema operacional eles escolheram usar modelos de memória plana e em vez disso, confie na lógica de paginação da unidade de gerenciamento de memória para controle de acesso).