memcmp比较两个struct是否相等
来源:互联网 发布:matlab 图像融合算法 编辑:程序博客网 时间:2024/06/07 04:34
还是深信服的题目,连续两轮技术面试,都反复问到这个问题。虽然说是考察内存对齐的点,但是被我自己聪明反被聪明误了。比如:
struct MyStruct{ char a; int b;};MyStruct A, B;memcmp(&A, &B, sizeof(MyStruct));
A和B是否可以通过memcmp来判断是否相等。我当时脱口而出,虽然要内存对齐,但是a后面会补三个’\0’所以还是可以判断是否相等的。真是迷之自信!这个问题其实最主要是考察你要知道内存对齐,MyStruct的实际大小是8就够了。然后未初始化的全局变量,static变量,编译器会自动初始化为0。但是局部变量的值是不确定的,必须先赋值再使用。虽然全局变量,static变量可以不初始化,但是建议还是保持好习惯,所有的变量都要先初始化再使用!所以,这里char a后面3个字节不知道原本内存中是什么数据,那么A和B是没法进行比较是否相等的!我们不妨gdb调试看看内存中的情况:
MyStruct A;A.a = 'a';A.b = 10;
这里看到,在’a’后面3个字节分别是’\344’ ‘\377’ ‘\377’,后面补齐的内容不确定,那么就造成了memcmp不能判断是否相等。
用gdb查看内存
格式:x /nfu
说明:
x 是 examine 的缩写
n 表示要显示多少个内存单元
f 表示内存单元显示方式,可取如下值:
x 按十六进制格式显示变量
d 按十进制格式显示变量
u 按十进制格式显示无符号整型
o 按八进制格式显示变量
t 按二进制格式显示变量
a 按十六进制格式显示变量
i 指令地址格式
c 按字符格式显示变量
f 按浮点数格式显示变量
u表示一个内存单元的长度
b 表示单字节
h 表示双字节
w 表示四字节
g 表示八字节
0 0
- memcmp比较两个struct是否相等
- 比较两个字符串是否相等?
- 比较两个数字是否相等
- 比较两个对象是否相等
- 比较两个字符串是否相等
- 比较两个UIImage是否相等
- 比较两个vector是否相等
- 比较两个字符串是否相等
- 比较两个字符串是否相等
- 比较两个数据是否相等
- 比较两个数组是否相等
- 比较两个double是否相等
- 比较两个记录集是否相等
- 比较两个字节数组是否相等
- 比较两个二维数组是否相等
- shell比较两个字符串是否相等
- 比较两个浮点型数值是否相等
- 如何比较两个集合是否相等
- 关于android studio错误:gradle project sync failed.please fix your project and try again的解决方案
- kinect Unity开发文章链接
- Fiddler对android手机进行抓包
- ORB SLAM在Ubuntu14.04下环境配置
- 在eclipse中启动tomcat后,context.xml中被自动还原的解决方法
- memcmp比较两个struct是否相等
- Python中的chr和ode函数
- STL中的string类(OJ常用部分)
- Android感应检测Sensor
- 排序算法(php学习整理篇)
- Charles使用
- 反射的相关教学
- 安全上下文
- 平衡二叉搜索树BST转换为双向链表