【问题标题】:What is the sense of converting PVOID buffer to PCHAR?将 PVOID 缓冲区转换为 PCHAR 是什么意思?
【发布时间】:2014-07-10 08:53:40
【问题描述】:

我在 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 是什么意思,这对对齐有帮助吗,如何?

【问题讨论】:

    标签: c++ c memory-alignment


    【解决方案1】:

    您没有将PVOID 转换为PCHAR。您正在将PVOIDs 的数组(衰减为PVOID *)转换为PCHAR

    PVOID alignedBuffer[BUFFER_SIZE/sizeof( PVOID )];
    

    这将alignedBuffer 定义为PVOIDs(或void *s)的数组。作为一个指针数组,它将被适当地对齐(通常在 32 位上为 4 个字节,在 64 位上为 8 个字节)。如果你只是这样做

    CHAR buffer[BUFFER_SIZE];
    

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

    【讨论】:

    • 我是否将 PVOID 数组转换为 PCHAR 而不是 PVOID 或 LPVOID,(FilterSendMessage 缓冲区参数类型为 LPVOID),只是个人喜好问题?
    • @BransDs 我怀疑将其转换为 PCHAR 而不是 PVOID 可能有助于从缓冲区读取输出,因为您不能取消引用 void 指针,否则这是一个品味问题.
    猜你喜欢
    • 2010-10-13
    • 2013-02-09
    • 2019-01-30
    • 1970-01-01
    • 2021-11-19
    • 2014-06-11
    • 2020-07-21
    • 1970-01-01
    • 2020-06-28
    相关资源
    最近更新 更多