在开发过程中发现一个问题,当在一个for循环中定义一个局部变量,打印该局部变量的地址,地址总是相同的,地址相同的原因是这是一个局部变量,for循环每次循环执行完毕总是会释放该局部变量,从堆栈的角度看总是会先释放堆栈然后压栈,所以才会造成每次的局部变量的值总是一样。
for(int i = 1; i < 5; i++)
{
int a;
a = i+10;
printf("a addr = %p\n", &a); //这里的a的地址总是一样的
}
汇编如下
fun():
push rbp
mov rbp, rsp
mov DWORD PTR [rbp-4], 1
jmp .L2
.L3:
mov eax, DWORD PTR [rbp-4]
add eax, 10
mov DWORD PTR [rbp-8], eax
add DWORD PTR [rbp-4], 1
.L2:
cmp DWORD PTR [rbp-4], 5
jle .L3
nop
pop rbp
ret