思路:
- emm,有点懵,这一块,只知道个大概,如果后期我深挖的话,我再回头来补充
- 上图
- 括号的位置,便是每次创建,调用函数的时候,所产生的函数栈帧,也可以理解为每次调用函数,在电脑里开辟的一块空间,
- 这空间实际就是一个栈,ebp栈底指针,esp栈顶指针,他俩就这么一框,就画了一个区域,随后ebs,edi,ebi这三个是初始化栈的,从edi直到ebp,就给区域内的内容刷新为CCCCCC了,也就是通常所说的乱码了,
- 而这些工作完成后,才开始函数内部变量空间的创建,这个图,下面是高地址,下面是低地址,每个编译器不一样,因此划分块也不一样,用ebp-8,也就是底部高地址,减去8字节,这个为这个变量空间的起始地址。
- 而函数运行时,是向下获取数据,即挨着该函数区域的下面,这就可以解释为什么,递归的时候,每次递归的值不同,因为每次递归后,新的递归值,就会被创建一个空间,然后压到栈顶,随后再创建下一个递归的函数。
- 而每次进入递归,都是一块崭新的空间,这个空间干什么事,不干其他函数空间什么事,他们互不干扰,除非,你想要最后return值,想从内部获得什么值,最后回归的时候,带回来。