5、数组地址增长方向和函数调用相关问题
1、数组地址增长方向和栈的生长方向是两个不同的概念。在不同的操作系统中栈的生长方向可能不一样,有的是向上生长,有的是
向下生长。但是不管是哪种生长方向,数组定义了之后,在栈中的生长方向都是向上的,如下图所示:
其中,数组上的箭头表示数组中数组的首地址位置。
2、具体见下图,主函数中调用fa函数,fa函数中调用了fb函数:
3、函数调用模型:
(1)在main函数中调用fa函数时,在栈中的先是关于main函数的相关数据,操作系统的运行状态、main函数的返回地址(指的是main函数运行完以后应该返回到哪里,程序接下来应该执行的部分)以及main函数的参数。当main函数调用fa函数时,main函数中断,栈中要保存main函数的运行状态,方便后面中断恢复时快速回到main函数被中断前的状态,然后栈中需要存放fa函数的返回地址(即fa函数调用完之后,返回的main函数中的位置,接下来应该执行的main函数的代码地址)以及fa函数的参数。
(2)再在fa函数中调用fb函数:
(3)当fb运行完之后,要将fb在栈中的相关数据出栈,通过返回地址和fa函数的运行状态回到fa函数中去,如下图。后续fa运行完,以及main函数运行完也是类似的,最后,整个程序运行完时,栈中就为空,没有数据。