栈的概念
栈的本质就是一段内存,程序运行时用于保存一些临时数据
如局部变量、函数的参数、返回值、以及程序跳转时需要保护的寄存器等
在高级语言里面,操作的是变量。在ARM汇编里面,操作的是寄存器(register)、内存和栈(stack)。
堆 需要用户通过malloc去申请和释放
栈 是靠编译器进行维护
栈的分类
增栈:压栈时栈指针越来越大,出栈时栈指针越来越小
减栈:压栈时栈指针越来越大,出栈时栈指针越来越小
满栈:栈指针指向最后一次压入到栈中的数据,压栈时需要先移动栈指针到相邻位置然后再压栈
空栈:栈指针指向最后一次压入到栈中的数据的相邻位置,压栈时可直接压栈,之后需要将栈指针移动到相邻位置
栈分为空增(EA)、空减(ED)、满增(FA)、满减(FD)四种
ARM处理器一般使用满减栈 从高地址往低地址存 STMDB指令存储 使用LDMIA读取
压栈和出栈的本质就是读写内存
或者
栈的使用实例-----子函数的调用过程(叶子函数)
因此 ,C语言中的子函数 汇编后一般都是压栈保护现场,结束时再进行出栈
栈的使用实例-----子函数的调用过程(非叶子函数)
联系C语言:
局部变量存在于栈中,如果不初始化的话是一个随机值
全局变量不初始化则为0,因为编译器会把他存放在BSS段,会把他全部清零