Dip*_*pto 3 c c++ padding packed
考虑以下结构:
typedef struct __attribute__((packed)) a{
int a1;
int b2;
char cArray[5];
int c3;
} Mystruct;
Run Code Online (Sandbox Code Playgroud)
现在在我的代码中,我这样做:
char source[50];
Mystruct mm;
//...
//initialization and other codes
//...
memcpy(&mm,source,sizeof(mm));
Run Code Online (Sandbox Code Playgroud)
我试图从字符串填充结构(从文件更具体),因此我不想填充.但是认为包装也会影响性能.
所以我的问题是,还有其他方法可以实现我想要的吗?
是否可以使用c ++中的类的成员变量执行相同的操作(从字符串填充)?如果有,怎么样?
我强烈建议您购买并阅读Write Portable Code.你不想采取这种方法.不仅因为它不可移植(想想endianess问题),而且确实会影响性能和原子性(非对齐的32位访问在没有LOCK前缀的x86上不是原子的).尽管前面的工作要多一点,但是编组/解组也要好得多.
编组/解组后面的想法是将数据从一种格式转换为另一种格式,然后再将它们转换回来.这就是Google Protocol Buffers,ZeroMQ等许多框架以便携方式传输数据的方式.你基本上有专门的函数来获取你所说的"字符串"数据,然后解析它,验证它,然后将它分配到你的结构中.您会看到编组和序列化在许多情况下可以互换使用.
例如,在您的情况下,您可能拥有原型的函数:
int
unmarshal_mystruct(const char *data, MyStruct &m);
Run Code Online (Sandbox Code Playgroud)
在内部,您将从中解析数据data并填充m.它确实变得乏味,这就是为什么这么多人使用框架的原因.
| 归档时间: |
|
| 查看次数: |
747 次 |
| 最近记录: |