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

简介:

内存分配与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类型的。

 

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

 

#include "iostream" using namespace std; int main() { //int c_demo = 0; //int i_demo = 5; unsigned short int tow_byte = 0x4142;//高位字节存放的是字符串A,地位字节存放的是字符串B cout << "the low byte data is " << *(unsigned char *)&tow_byte<<endl; cout << "the high byte data is" << *((unsigned char *)&tow_byte +1)<<endl;//这里是+1,并不像内存地址分配时从大到小的 cout << "the address of the data is = " << &tow_byte<<endl; //cout << "int address = " << &i_demo<<endl; return 0; }

 

 

 

 


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

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

目录
相关文章
|
6月前
|
人工智能 缓存 vr&ar
big.LITTLE&DynamIQ
big.LITTLE&DynamIQ
110 0
|
6月前
|
存储 网络协议 C语言
一文带你秒懂 字节序(byte order),比特序(bit order),位域(bit field)
一文带你秒懂 字节序(byte order),比特序(bit order),位域(bit field)
870 0
|
6月前
|
负载均衡 调度 Android开发
有关big.LITTLE,你需要知道的十件事情
有关big.LITTLE,你需要知道的十件事情
102 0
|
存储
【计算机基础】 --- LSB、MSB与大/小端字节序
【计算机基础】 --- LSB、MSB与大/小端字节序
731 0
vxworks block too big 问题的解决
vxworks block too big 问题的解决
147 0
vxworks block too big 问题的解决
|
Java
JDK默认是little-endian
JDK默认是little-endian
54 0
Bit++
Bit++
211 0
Bit++
|
存储 Java C++
大端(Big Endian)与小端(Little Endian)简介与实现
【大端(Big Endian)与小端(Little Endian)简介】Byte Endian是指字节在内存中的组织,所以也称它为Byte Ordering,或Byte Order。     对于数据中跨越多个字节的对象,我们必须为它建立这样的约定: (1) 它的地址是多少? (2) 它的字节在内存中是如何组织的?     针对第一个问题,有这样的解释:     对于跨
2393 0
|
存储
大端模式、小端模式、高字节序、低字节序、MSB、LSB
你知道内存是怎么读取数据的吗?知道数据是怎么一个一个字节发送的吗?是低字节先发还是高字节先发?是bit0先发还是bit7先发?是从低地址开始读还是从高地址开始读?看完本篇比应该就明白了~
1519 0
大端模式、小端模式、高字节序、低字节序、MSB、LSB
|
算法 编译器
渐进符号 big-O、big-Ω、big-Θ
算法分析 渐进符号 big-O、big-Ω、big-Θ
1093 0
渐进符号 big-O、big-Ω、big-Θ