本文主要是介绍不同内存对齐方式 memcpy之后数据错误,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一.背景:
1.使用#pragma定义结构体:RECV_CMD_DATA_t和RECV_CMD_PACK_t,按照1字节进行内存对齐
#pragma pack(1)typedef struct recv_cmd_data
{int iType;long long llInt;int iLen;char cStr[REPLY_STR_MAX_LEN];
}RECV_CMD_DATA_t;typedef struct recv_cmd_pack
{int iCnt;RECV_CMD_DATA_t sCmdData[REPLY_TRANS_MAX_CNT];
}RECV_CMD_PACK_t;#pragma pack()
2.redis中定义的结构体:redisReply,按照4字节进行内存对齐
/* This is the reply object returned by redisCommand() */
typedef struct redisReply {int type; /* REDIS_REPLY_* */long long integer; /* The integer when type is REDIS_REPLY_INTEGER */int len; /* Length of string */char *str; /* Used for both REDIS_REPLY_ERROR and REDIS_REPLY_STRING */size_t elements; /* number of elements, for REDIS_REPLY_ARRAY */struct redisReply **element
这篇关于不同内存对齐方式 memcpy之后数据错误的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!