簡體   English   中英

如何在 MySQL 數據庫中使用 __attribute__((packed)) 存儲 c++ 結構?

[英]How to store c++ structures with __attribute__((packed)) in MySQL database?

如何在 MySQL DB 中輕松存儲和檢索具有屬性((packed)) 的任何大小的 c++ 結構?

結構示例:

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 讀取后復制出打包的結構。 永遠不要多次訪問打包結構,在許多架構上訪問速度會非常慢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM