如何存储c++结构与__attribute__((打包))在MySQL数据库?



如何轻松存储和检索具有属性的任意大小的c++结构((包装))在MySQL数据库?

结构的例子:

typedef struct __attribute__((packed))
{
signed char result;
unsigned char errorCode;
} Response; 
typedef struct __attribute__((packed))
{
unsigned char   rackId;
unsigned char   subRackId;
unsigned char   cardId;
unsigned char   cardType;
unsigned char   cardSubType;
unsigned char   portId;
Response        ret; 
}Configure;

由于所有内容都是char,因此packed属性没有意义,只有static_assert(sizeof(Configure) == 8);

可以存储为CHAR(8)。

如果你有一个不同类型的结构体,试着安排它们,这样就不会发生填充(static_assert的大小来确保)。添加手动填充比使用packed更好。

但是如果你必须使用packed,你应该使用一个未打包的结构来工作,并且只将数据复制到一个打包的结构中,然后写入mysql,并在从mysql读取后从打包的结构中复制出来。永远不要访问一个包装结构超过一次,在许多体系结构中访问将非常慢。

相关内容

  • 没有找到相关文章

最新更新