把大端、小端与堆、栈的生长方向联系起来记忆
对于大端、小端的区别,可能看资料的时候确实理解了,但过段时间就搞混了;高位低地址、低位高地址、高位高地址、低位低地址...是不是看起来就好头大,哪个对应哪个啊。其实可以把大小端与堆栈联系起来记忆,虽然两者讲的不是一个粒度的,但大小端模式里高低位的存放与堆和栈的生长方向有一个共同点,它们都存在一个数据存放顺序的问题。
下面结合几张图说明一下。
作者: 蝉蝉
请尊重作者劳动成果,转载请在标题注明“转载”字样,并标明原文链接:
http://www.cnblogs.com/chanchan/p/7820508.html
假设机器为32位的,为方便表示,下文的数据都以16进制来表示。有一个数为0x12345678,在大端、小端模式下分别以下面两张图的形式存储:
可以看出,大端是高位存储在低地址,低位存储在高地址,而小端正相反,高位存储在高地址,低位存储在低地址。仔细观察一下,其实大端更符合人类的书写方式;人手动在纸上写出来0x12345678,一般都是从左到右,先写1,再写2,依次类推,最后写8,大端也是这样,从初始的存储位置,先存入12,再存入34,最后存入78;对人类来说,小端就有点绕了,要画出其存储结构,先要计算下总共占几个字节,然后从初始地址往上数几个字节,再由上到下分别写12、34、56、78。对上面的两个图分别加个箭头可以更清楚的说明人一般的思维过程,见下面两图:
也就是说,可以看成大端由下往上书写,或低地址往高地址书写;小端相反,由上往下书写,或高地址往低地址书写。到这里,是不是感觉跟栈和堆的生长方向有点相像了呢?堆和栈的生长方向见下图:
即栈是由上往下生长的,堆相反,由下往上生长。这个一般很好记,两个对着生长,可以提高内存的利用率。
虽然堆和栈与大端小端不是一回事情,但可以把大端小端与堆栈联系起来记忆,大端对应堆,由下往上生长;小端对应栈,由上往下生长。下次再遇到大小端时,是不是可以很快分清哪个是哪个了?