1 第一点,先要明白一个,就是系统在申请内存的时候,是从高地址到低地址还是从低地址到高地址。
先用下面一个简单的程序来判断申请的内存地址顺序问题。下面是一个典型的内存结构图。
我们用下面这个程序来检验:
#include <stdio.h> int main() { int a; int b; printf("%p\n",&a);//先申请a空间 并且a的地址更高 printf("%p\n",&b); return 0; }
可以看出,栈空间的申请是从高到低的。
2 有了上面的概念后,我们开始进行大端小端的分析。
先引入一则关于大端和小端的故事:端模式(Endian)的这个词出自Jonathan Swift书写的《格列佛游记》。这本书根据将鸡蛋敲开的方法不同将所有的人分为两类,从圆头开始将鸡蛋敲开的人被归为Big Endian,从尖头开始将鸡蛋敲开的人被归为Littile Endian。小人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开。在计算机业Big Endian和Little Endian也几乎引起一场战争。在计算机业界,Endian表示数据在存储器中的存放顺序。
简单来说,大端就是将高位字节放到低位地址空间里,小端就是将高位字节放到高位字节。
那么如何检测一个系统是大端还是小端,我们可以用下面的代码:
#include <stdio.h> //判断操作系统是大端还是小端 bool checkendian() { union my { int a; char b; }; my t; t.a=1; return(t.b==1); } int main() { printf("%d\n",checkendian()); return 0; }
如何判断系统是大端还是小段算法,布布扣,bubuko.com
原文:http://blog.csdn.net/itbuluoge/article/details/20848749