C++变量在栈上的布局

来源:互联网 发布:mac安装brew命令 编辑:程序博客网 时间:2024/05/16 15:39

在笔试、面试中,经常有这样的题目:


问b的值是多少?

 

在C++中,double型变量占8个字节,int型变量占4个字节。所以b的值,就是a中的4个字节构成的整数值。这样,我们如果知道a在内存上如何存放,就可以得到b的值。

数据的存放,根据CPU的不同,有大端和小端方式。Intel的CPU使用的是小端方式,即:低位数据放在低地址,高位数据放在高地址。在栈上,分配方式为地址递减,即:先定义的变量,放在高地址出,后定义的变量放在低地址处。举例说明:

定义2个变量:int a = 0x003a0051;int b= 0x0042007b;

那它们在栈上的布局如下:

 

0x0012FF74  7b  //b的内存布局

0x0012FF75  00  

0x0012FF76  42  

0x0012FF77  00  

0x0012FF78  51    //a的内存布局           

0x0012FF79  00  

0x0012FF7A  3a  

0x0012FF7B  00  

 

从上面的内存布局我们可以看到,先定义的a放在高地址处,后定义的b放在低地址处;每个变量,高字节放在高地址处,低字节放在地址处;变量的地址为低字节所处的地址。

 

了解了上面的内容,再做开始出的题目,就容易了。但还有一些知识,需要知道。即double如何存放,具体参见下面的链接:

http://blog.csdn.net/virus026/archive/2008/01/22/2059989.aspx

 

掌握了以上内容,以后遇到此类问题,都可以以此解决。

 

 

原创粉丝点击