c判断两个结构体内容相等(不能通过内存判断)
(2018-10-11 12:27:02)分类: 嵌入式软件 |
from:https://blog.csdn.net/qq_16097611/article/details/74539663
通过gcc -S得到汇编代码:
系统环境为小端:因此这里的short_num对应的为 0x03 0x00 0xff 0xff, 可见补齐的两个字节并没有置0,还有可能是其他的数值
结构体
-
typedef struct A {
-
short short_num;
-
int int_num;
-
} A;
如:
-
#include
-
-
typedef struct A {
-
short short_num;
-
int int_num;
-
} A;
-
-
int main() {
-
A a;
-
a.short_num = 3;
-
a.int_num = 3;
-
printf("%d,%d\n", a.short_num, a.int_num);
-
return 0;
-
}
通过gcc -S得到汇编代码:
-
subq $16, %rsp
-
movw $3, -16(%rbp)
-
movl $3, -12(%rbp)
其中movw是16位, movl是32位,其中均是将3赋值,但是中间没有任何置0的操作。
另通过gdb查看
-
(gdb) x/8xb &a
-
0x7fffffffdbc0: 0x03 0x00 0xff 0xff 0x03 0x00 0x00 0x00
系统环境为小端:因此这里的short_num对应的为 0x03 0x00 0xff 0xff, 可见补齐的两个字节并没有置0,还有可能是其他的数值
因此对于有补齐类型的结构体,其是不能通过判断内存存储的值是否相等而判断两个结构体是否相等的。
在实现map的key时可能更需要注意到这点。
前一篇:2018年10月10日
后一篇:C++和C混合编程