现在的位置: 首页 > 综合 > 正文

内存分配与little-endian&big-endian

2013年10月01日 ⁄ 综合 ⁄ 共 1096字 ⁄ 字号 评论关闭

内存分配与little-endian&big-endian

 

 


 

 

 

栈里面的内存地址分配是从大往小分配。即没每次压栈,栈顶指针-1(不一定是1,这个要根据数据类型来分配). 堆里面的数据地址分配是从小到大分配的,每次往堆里面压如一个数,相应的地址要增加。

 

对于单字节变量来说,地址分配比较容易,即选择一个没有分配的地址给它。但是对于对字节变量来说,地址分配,则没有单字节那么容易理解: 首先说说little-endian和big-endian的概念

 

little-endian:数据地位字节放在低地址处,一次排列,数据高位字节放在高低地址处。

big-endian则刚刚相反。

 

有了这个了解,再来看看数据分配问题: 例如: unsigned short int s_int_data = 0x4142; 这里很明显,short int是2个字节的数据。那么为了表示这个数据,s_int_data应该有一个地址,那么,对于多地址数据来说,我们所说的地址就是该多字节数据的首地址,这个首地址应该是该数据所在空间中地址最小的一个,更详细的说:假如给s_int_data分配的地址依次是 2001,2000,那么这个首地址应该是2000。即s_int_data的地址为2000,那么在这两个字节中,数据的高位字节存放在2001,地位字节存放在2000. 而对于通常我们使用的x86构架的PC来说,都是little-endian类型的。

 

一下代码可以更加详细的说明这些理论:

 

 

 

 

 


版权申明:
转载文章请注明原文出处http://blog.csdn.net/feiyinzilgd/archive/2010/12/21/6089413.aspx

并请联系谭海燕本人或者前往谭海燕个人主页留言

抱歉!评论已关闭.