美文网首页
C++调用redis Ping Pong测试失败

C++调用redis Ping Pong测试失败

作者: mindhook | 来源:发表于2020-03-12 20:43 被阅读0次

在使用hiredis的静态库的时候,vs监视器能看到redisReply中返回的值能看到str和len,但是通过memcpy到char数组中,出现异常。

定位字节对齐的问题。因为两个结构体中字段占用的内存分配是不匹配的,直接进行memcpy一定会导致字段值错误。(redis静态库中编译使用了按照1字节对齐,使用静态库的函数对齐方式是编译器的默认对齐方式,4字节对齐)

为要设置的对齐大小,windows下可以设置为1,2,4,8,16,linux中g++只能是1,2,4

字节对齐的作用:

字节对齐的作用不仅是便于cpu快速访问,同时合理的利用字节对齐可以有效地节省存储空间。对于32位机来说,4字节对齐能够使cpu访问速度提高,比如说一个long类型的变量,如果跨越了4字节边界存储,那么cpu要读取两次,这样效率就低了。但是在32位机中使用1字节或者2字节对齐,反而会使变量访问速度降低。所以这要考虑处理器类型,另外还得考虑编译器的类型。在vc中默认是4字节对齐的,GNU gcc 也是默认4字节对齐。

更改编译器字节对齐的两种方式:

#pragma pack (n)  / #pragma pack (),C编译器将按照n个字节对齐 / 取消设置。

 __attribute((aligned (n))),让所作用的结构成员对齐在n字节自然边界上。如果结构中有成员的长度大于n,则按照最大成员的长度来对齐。__attribute__ ((packed)),取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐。

#pragma pack(show)来通过警告的方式来显示当前的对齐大小

相关文章

  • C++调用redis Ping Pong测试失败

    在使用hiredis的静态库的时候,vs监视器能看到redisReply中返回的值能看到str和len,但是通过m...

  • Redis集群概念和使用

    1、Redis Cluster的架构图。 架构细节(1)所有的redis节点彼此互联(PING-PONG机制),内...

  • CentOS搭建Redis集群

    集群原理-redis-cluster架构图 架构细节: (1)所有的redis节点彼此互联(PING-PONG机制...

  • Redis单机版搭建

    首先放一张Redis的架构图: 架构细节: (1)所有的redis节点彼此互联(PING-PONG机制),内部使用...

  • Redis第2️⃣2️⃣课 Cluster故障转移

    一、故障发现 节点间通过ping / pong 消息实现故障发现:不需要sentinel。ping / pong ...

  • kurento-json-rpc相关问题

    ping不运行的原因 成功发送过ping消息后才激活服务端的ping-pong机制 ping超时时间 ping超时...

  • Redis几个重要的健康指标

    存活情况 所有指标中最重要的当然是检查redis是否还活着,可以通过命令PING的响应是否是PONG来判断。 连接...

  • redis安装

    1、安装 2、启动 发ping ,响应回pong就说明安装启动成功了 2、在同一台机器上启用多个redis实例(通...

  • Stickman Pong-Master

    Do you like ping pong games? If yes, this game will be pe...

  • 日记

    This week I play the basketball and ping pong ball. And I...

网友评论

      本文标题:C++调用redis Ping Pong测试失败

      本文链接:https://www.haomeiwen.com/subject/qlbwjhtx.html