我们在学习程序是如何执行的时候,不免会涉及到栈空间的相关知识,有些地方会通俗地说分配栈空间时,栈是向下增长的,那么这句话到底是什么意思,下面我们就以X86架构为例来看一下。
向下增长
我们先来看一下向下增长的理解是什么样的,假设给执行一个方法分配的地址空间为10000~10007,栈空间如下图:
由图可以看出地址从10007增长到10000,假设这里一个地址正好存放一个字节,将数据1push入栈的时候,数据将存放在地址10007上,如下:
向上增长
然而有些人书写的时候习惯把大的放在下面,这样就产生了向上增长的理解。同样以上面为例,栈空间如下:
其实只是把高地址放在了下面,逻辑是一样,将数据1入栈:
所以,总的来说,像X86这种架构,栈空间是由高地址向低地址增长。
大端小端问题
如果将一个16进制的数字0x1234入栈,我们刚刚假定了一个地址只能存放一个字节,0x1234有两个字节,这样就会遇到字节序问题,也就是我们常说的大端、小端问题。我们以栈空间向下增长的思想为例,来看下大、小端存储的形式。数字0x1234中12为高位,34为低位。
小端存储
如图,高位存在高地址就是小端存储方式。
大端存储
如图,低位存在高地址就是大端存储方式。
本章节就到这里了。