[英]Visual C++ equivalent of GCC's __attribute__ ((__packed__))
[英]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.