关于栈底、栈顶、高地址、低地址
如果是自己写入栈push和出栈pop程序时,地址的变化有我们所写的程序来定。当我们将写好的程序编译时,局部变量会被分配到栈中,此时的变量是从高地址向低地址分配,高地址是栈底,而低地址为栈底。
如图所示,入栈方向是从高地址向低地址,栈底是高地址,栈顶是低地址。但注意数据的存入仍遵循小尾模式,即高位数据存入高位地址,低位数据存入低位地址。
堆栈是内存中一块特定的区域,在DOS下是由自己编写决定,而在Windows下是有系统决定,系统一般会占据内存中的高地址位,如果stack的入栈方向是从低至高的话,如果栈溢出,会影响系统,所以入栈的方向是由高地址位向低地址位。
程序在运行时,自动变量和函数参数都会分配到stack中,在编译时,已将变量的偏移地址记住。