c++ - PVOID buffer转PCHAR有什么意义?

标签 c++ c memory-alignment

我在 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 数组(衰减为 PVOID *)转换为 PCHAR

PVOID alignedBuffer[BUFFER_SIZE/sizeof( PVOID )];

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

CHAR buffer[BUFFER_SIZE];

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

关于c++ - PVOID buffer转PCHAR有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24672256/

相关文章:

c++ - 如何将 cv::Mat 转换为 cv::Rect

c++ - uninitialized_copy() 异常安全吗?

c - 用C语言生成随机数

c++ - Doxygen 最后一个枚举成员未记录

c - 哪些对齐问题限制了 malloc 创建的内存块的使用?

c++ - 在 C/C++ 的 ODBC 程序中找不到 SQL.H 和 SQLEXT.H

C++ - SDL2 和 OpenGL - Visual Studio 错误 LNK2019 : unresolved external symbol

c - 将 make 与 -j4 或 -j8 一起使用

memory - 为什么我无法分配 RAM 位数?

c - 有没有办法保证 malloc()-ed 结构的成员对齐