把大端、小端与堆、栈的生长方向联系起来记忆

  对于大端、小端的区别,可能看资料的时候确实理解了,但过段时间就搞混了;高位低地址、低位高地址、高位高地址、低位低地址...是否是看起来就好头大,哪一个对应哪一个啊。其实能够把大小端与堆栈联系起来记忆,虽然二者讲的不是一个粒度的,但大小端模式里高低位的存放与堆和栈的生长方向有一个共同点,它们都存在一个数据存放顺序的问题。html

  下面结合几张图说明一下。3d

 

做者: 蝉蝉htm

请尊重做者劳动成果,转载请在标题注明“转载”字样,并标明原文连接:blog

http://www.cnblogs.com/chanchan/p/7820508.html内存

 

  假设机器为32位的,为方便表示,下文的数据都以16进制来表示。有一个数为0x12345678,在大端、小端模式下分别如下面两张图的形式存储:im

                                     

  能够看出,大端是高位存储在低地址,低位存储在高地址,而小端正相反,高位存储在高地址,低位存储在低地址。仔细观察一下,其实大端更符合人类的书写方式;人手动在纸上写出来0x12345678,通常都是从左到右,先写1,再写2,依次类推,最后写8,大端也是这样,从初始的存储位置,先存入12,再存入34,最后存入78;对人类来讲,小端就有点绕了,要画出其存储结构,先要计算下总共占几个字节,而后从初始地址往上数几个字节,再由上到下分别写十二、3四、5六、78。对上面的两个图分别加个箭头能够更清楚的说明人通常的思惟过程,见下面两图:数据

                              

也就是说,能够当作大端由下往上书写,或低地址往高地址书写;小端相反,由上往下书写,或高地址往低地址书写。到这里,是否是感受跟栈和堆的生长方向有点相像了呢?堆和栈的生长方向见下图:db

  即栈是由上往下生长的,堆相反,由下往上生长。这个通常很好记,两个对着生长,能够提升内存的利用率。img

  虽然堆和栈与大端小端不是一回事情,但能够把大端小端与堆栈联系起来记忆,大端对应堆,由下往上生长;小端对应栈,由上往下生长。下次再遇到大小端时,是否是能够很快分清哪一个是哪一个了?时间

相关文章
相关标签/搜索