C++变量在栈上的布局

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


问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

 

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

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值