让我清楚地说明情况,我正在学习使用gdb的c数据类型。
int main(){
int integer = 2;
return 0;
}
首先我在我的程序中引入了一个int
,它是4个字节x86
生成一个可接受的汇编代码如下。
0x00000000004004ad <+1>: mov %rsp,%rbp 0x00000000004004b0 <+4>: movl $0x2,-0x4(%rbp)
然后我相信出了问题,我决定尝试char null_byte = '\0'
int main(){
char nul_byte = '\0';
int integer = 2;
return 0;
}
char null_byte = '\0'
,并在下面编译了生成的汇编程序代码。0x00000000004004ad <+1>: mov %rsp,%rbp 0x00000000004004b0 <+4>: movb $0x0,-0x1(%rbp) 0x00000000004004b4 <+8>: movl $0x2,-0x8(%rbp)
现在帮我解释为什么在引入null_byte char
之后基址指针将8个字节移位到低位而不是4个?