在笔试、面试中,经常有这样的题目:
问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
掌握了以上内容,以后遇到此类问题,都可以以此解决。