栈
栈
栈是一种典型的后进先出(last in first out)的数据结构,其操作主要有压栈(push)和进栈(pop)两种操作。如图。两种操作都操作栈顶,不能直接操作栈底。
高级语言在运行时都会转换为汇编程序,在汇编程序运行过程中,充分的利用了这一数据结构。每个程序在运行时都有虚拟地址空间,其中一部分就是该程序对应的栈,用于保存函数调用信息和局部变量。此外常见的操作也是压栈和出栈。需要注意的是,程序的栈是从进程地址空间的高地址向低地址增长的。
需要注意的是:32位和64位程序有一些简单的区别:
1、x86 函数参数在函数返回地址的上方。
2、x64 system v amd64 abi 等前六个整型或指针参数依次保存在 RDI,RSI,RDX,RCX,R8,R9寄存器中如果还要更多的参数的话才会保存在栈上。
3、内存地址不能大于0x00007FFFFFFFFFFF,6个字节长度,否则会抛出异常。