我在 MS 代码示例中看到下一个代码:

PVOID alignedBuffer[BUFFER_SIZE/sizeof( PVOID )];
PCHAR buffer = (PCHAR) alignedBuffer;

hResult = FilterSendMessage( context->Port,
                                 &commandMessage,
                                 sizeof( COMMAND_MESSAGE ),
                                 buffer,
                                 sizeof(alignedBuffer),
                                 &bytesReturned );

(alignedBuffer 将保存作为重播传递给 FilterSendMessage 调用的结构数组)
将 PVOID 转换为 PCHAR 的意义是什么,这对对齐有帮助,如何?

最佳答案

您没有将 PVOID 转换为 PCHAR 。您正在将一组 PVOID s(衰减为 PVOID * )转换为 PCHAR

PVOID alignedBuffer[BUFFER_SIZE/sizeof( PVOID )];

这将 alignedBuffer 定义为 PVOID s(或 void * s)的数组。作为一个指针数组,它将被适本地对齐(通常在 32 位上为 4 个字节,在 64 位上为 8 个字节)。如果你简单地做
CHAR buffer[BUFFER_SIZE];

没有类似的保证,因为 CHAR 没有对齐要求。

关于c++ - 将 PVOID 缓冲区转换为 PCHAR 是什么意思?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24672256/

10-09 22:45