内存填充问题
Memory padding issue
我正在处理一个示例应用程序,在这个应用程序中,我正在序列化一些数据。在客户端应用程序中,我正在读取序列化的数据。当我这样做的时候,我观察到一些奇怪的行为。
示例应用程序中对象的大小与客户端中数据的大小不同。我认为这是因为内存填充。我的问题是我正试图写"BRUSHOBJ"文件。这个结构是由Microsoft定义的。我可以改变这个结构的声明。请告诉我如何解决这个问题。
请让我知道如何在诽谤的数据类型上应用内存填充
听起来好像您只是试图将struct
的地址转换为char*
,用ostream::write
。这根本行不通。有填充,但也有不同类型的大小不同的平台会有所不同)、字节顺序等等外来平台(包括大多数大型机)数据表示本身。通常,您需要一个输出数据应该是什么样子的规范比如,一个字节一个字节地写,然后你必须用需要价值。
这只是针对简单类型。快速浏览一下BRUSHOBJ显示它包含一个指针,你可能需要跟着,你肯定得做点什么,因为接收端不能用指针做任何事数据。(考虑到描述,我怀疑您将不得不转换它转换成某种标识符,并且还传输一个字典映射对象的这种标识符。但我不太清楚这是怎么回事结构是用来确定的)
你有两个选择
- 序列化数据 #pragma pack修改内存填充
序列化数据与内存填充无关,您只是定义了一种向内存位置(内存流)写/读回内存的方法。
我看到_BRUSHOBJ结构体有以下定义,
typedef struct _BRUSHOBJ {
ULONG iSolidColor;
PVOID pvRbrush;
FLONG flColorType;
} BRUSHOBJ;
请注意,跨进程发送指针是没有意义的。指针的序列化应该通过写入内存大小和内存本身来完成。无论如何,如果你想传递这个BRUSHOBJ到一个窗口函数,你可以得到未定义的行为。这不是跨进程传递BRUSHOBJ的支持/文档方式。
内存填充可以像这样应用
#pragma pack(push)
#pragma pack(4)
struct myStruct
{
char Char1
int Int1;
};
#pragma pack(pop)
相关文章:
- C++ 填充数组时遇到问题
- 将十六进制值设置为用于填充的字符变量时出现问题
- 我想直接在结构中插入,但没有一种方法可以正确避免填充问题
- 使用初始化列表填充C++中的多维结构数组时出现问题
- 使用队列和列表 STL 进行C++分配。在将数据填充到列表或队列中然后打印该数据时遇到问题
- 在使用结构体和用函数填充其变量(使用指针)时遇到问题
- 用零填充矩阵行的问题
- BMP文件行填充问题
- 按行、列或随机从数组填充矩阵时出现错误索引问题
- 清除并重新填充 std::vector<std::vector<T>>导致分配问题
- 填充 c++ 数组时遇到问题,每个索引处只有最后一项
- 尝试递归填充和打印出两组的所有归纳函数的问题
- 这个简单的木炭填充器有什么问题
- 在检查现有元素时,从文件填充并行数组时出现问题
- 填充动态类模板数组时遇到问题
- 使用__declspec的内存填充问题
- 使用 C++11 的 std::regex 填充子匹配时遇到问题
- c++填充数组问题
- 长哈希填充问题
- 内存填充问题