赞
踩
对于以下代码:
int main()
{
int a = 100010001000;
int b = 100;
cout << "a = " << a << " " << &a << endl;
cout << "b = " << b << " " << &b << endl;
system("pause");
return 0;
}
输出结果为:
下面我们使用断点调试技术,在结束前打上断点,以便于我们查看内存
得到以下结果
打了断点的含义是:该行不会被执行,在其之前的会被执行
对于上图,13行不会被执行,13行(不包含)之前的会被执行。
然后做如下操作,以查看内存:
设置字节显示情况,对于int来说,这里是4个字节的,选择4,观察可以得到:地址的连续性也是不断+4的
这里涉及到一个引申的知识点,重点强调一下
我们观察到对于int a = 100;在内存上显示是这样的
它采用十六进制来显示,这是为了方便人类查看,当然,十六进制的发明还有很多原因和应用,这里不再扩展。
每两个十六进制位,就是一个字节,因此上面是两两显示的,但是值得注意的是,这种四字节查看方式,实际上,00 00 00的地址只是隐藏了而已,让我们使用单字节查看方式,你就瞬间明白了
事实上,单字节的查看方式,更加符合内存的存储单元的实际情况。
这里要尤为注意
我们来回看一下**《汇编语言》**中的内存情况,进一步阐述。
一个存储单元,对应8个二进制位,2个十六进制位
存储单元的编号,也就是内存地址
甚至,对于二进制位的描述,也是自上而下权重升高的
不过值得说明的是,这只是一种通用的习惯,并不是强制性的,与实际硬件的实现方式也关系不大。
【扩展材料】
在此链接我再补充一点:我们常用的,比如十进制的8,表示为0000_1000,这就是小端序
0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
---|
按照标准,小端序:数据的高位字节存放在地址的高端 低位字节存放在地址低端
这一点也印证了上述第五节的观点,高位地址的权重更大
低地址 | 0x0015F740 | 98 |
---|---|---|
↓ | 0x0015F741 | AB |
↓ | 0x0015F742 | B8 |
↓ | 0x0015F743 | 9A |
↓ | 0x0015F744 | 10 |
↓ | 0x0015F745 | 22 |
↓ | 0x0015F746 | FB |
高地址 | 0x0015F747 | 00 |
问题1:在地址0x0015F741中最前面的0x是什么含义?**
在C/C++中,0x或0X代表十六进制的前缀,这也就解释了为什么后面的用十六进制表示的地址。
在java7以后,有以下前缀,来代表不同的进位计数制(以下的0中间带圆点,类似于扁的⊙)
在Verilog和数字逻辑中,十六进制使用h或者H来表示
十六进制的表示有
具体使用h还是0x,取决于使用环境
同理,二进制和八进制也有前缀和后缀
对于十进制
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。