当前位置:   article > 正文

【VS C++ 2010】查看内存的方法详解_vs2010调试查看内存

vs2010调试查看内存

1 示例代码

对于以下代码:

int main()
{
	int a = 100010001000;
	int b = 100;
	cout << "a = " << a << "  " << &a << endl;
	cout << "b = " << b << "  " << &b << endl;
 	system("pause");
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

输出结果为:
输出结果

2 设置断点调试

下面我们使用断点调试技术,在结束前打上断点,以便于我们查看内存

  • 按F9打上断点
  • 再按F5进行调试
  • 再按回车

得到以下结果
断点

3.1 注意事项

打了断点的含义是:该行不会被执行,在其之前的会被执行

对于上图,13行不会被执行,13行(不包含)之前的会被执行。

3 查看内存

然后做如下操作,以查看内存:
查看内存
设置字节显示情况,对于int来说,这里是4个字节的,选择4,观察可以得到:地址的连续性也是不断+4的
设置字节
这里涉及到一个引申的知识点,重点强调一下

4 内存查看方式分析

我们观察到对于int a = 100;在内存上显示是这样的
四字节查看
它采用
十六进制
来显示,这是为了方便人类查看,当然,十六进制的发明还有很多原因和应用,这里不再扩展。

两个十六进制位,就是一个字节,因此上面是两两显示的,但是值得注意的是,这种四字节查看方式,实际上,00 00 00的地址只是隐藏了而已,让我们使用单字节查看方式,你就瞬间明白了
单字节查看
自上而下权重升高
事实上,单字节的查看方式,更加符合内存的存储单元的实际情况

这里要尤为注意

  • 地址越大,权重越高,也就是下面的是高字节,上面的是低字节

5 建立关联:汇编语言

我们来回看一下**《汇编语言》**中的内存情况,进一步阐述。

5.1 基本单位为字节的情况

存储单元
一个存储单元,对应8个二进制位,2个十六进制位
存储单元的编号,也就是内存地址

5.2 基本单位为二进制位的情况

甚至,对于二进制位的描述,也是自上而下权重升高的
自上而下权重升高
不过值得说明的是,这只是一种通用的习惯,并不是强制性的,与实际硬件的实现方式也关系不大。

6 扩展阅读

【扩展材料】

在此链接我再补充一点:我们常用的,比如十进制的8,表示为0000_1000,这就是小端序

00001000

按照标准,小端序:数据的高位字节存放在地址的高端 低位字节存放在地址低端

这一点也印证了上述第五节的观点,高位地址的权重更大

低地址0x0015F74098
0x0015F741AB
0x0015F742B8
0x0015F7439A
0x0015F74410
0x0015F74522
0x0015F746FB
高地址0x0015F74700

7 疑问


问题1:在地址0x0015F741中最前面的0x是什么含义?**

在C/C++中,0x或0X代表十六进制的前缀,这也就解释了为什么后面的用十六进制表示的地址。

在java7以后,有以下前缀,来代表不同的进位计数制(以下的0中间带圆点,类似于扁的⊙)

  • 二进制:0b或者0B
  • 八进制:0(难区分,不常用)
  • 十六进制: 0x或0X
  • 十进制:不写前缀

7.1 扩展:进位计数制的前缀和后缀

在Verilog和数字逻辑中,十六进制使用h或者H来表示

十六进制的表示有

  • 前缀: 0x或0X
  • 后缀: h或H

具体使用h还是0x,取决于使用环境

同理,二进制和八进制也有前缀和后缀

  • 二进制
    • 前缀:0b或0B
    • 后缀:b或B
  • 八进制 【不常用】
    • 0
    • o或O

对于十进制

  • 没有前缀,不写前缀就是的十进制
  • 后缀:d或D
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/160797
推荐阅读
  

闽ICP备14008679号