定义
首先我们有一个常识,Windows采用小端存储方式。
探究Windows下vs2019是什么存储?
在小端存储方式中,低字节存储在内存的低地址处,高字节存储在内存的高地址处。这与大端存储方式恰好相反,大端存储方式中高字节存储在低地址处,低字节存储在高地址处。目前主流的CPU和操作系统都采用小端存储方式,因此小端存储已成为事实上的标准。
看到上面这句话,什么高地址低址值很抽象。那么首先我们就来学习一下何为高低地址。
地址一般是上低下高,左低右高。
下面来vs2019中探究一下调式中的内存中的这些数值都是些什么。
- 下图是完整的一个内存图,我选择是展示64列,也就是这一行全部展示了,密密麻麻的,所以一般都会选择少一点,够看你当前变量占用字节长度即可;
- 例如int->4列,double->8列
上图的最左边其实就是每一行开始的那个位置的地址,每一行的每一个字节都会右对应的地址,但是如果你都显示,也就是说,每一个字节都去显示它的地址,看起来就太冗杂了,所以vs2019中就只是显示这一行中第一个的地址。过64字节换一行。
- 还需要注意的是,在内存中都是十六进制进行存储的,无论是字符串还是整形
这里写一个代码来深度探究一下调试中的内存如何查看
int main()
{
int a = 3;
int b = 4;
printf("%d %d",a,b);
return 0;
}
我们进行调试,打开内存监视窗口,输入&a和&b也就是取他们的地址,正好这两个变量,离的很近,我就一次找到了。
-
最先得到的内容便是
左
边是低
地址,右
边是高
地址。 -
对于内存中的这些
04
00
00
00
他是十六进制的,二进制转十六进制(四位组合法),也就说明,一个00
中有两个十六进制数就代表一个字节。这里是整形变量b占用四个字节,所以有四个一字节组成。
-
而且我么发现在一个
04
00
00
00
四个字节中的一个字节04
中的内部顺序不变化都是先放低位再放高位。无论是在大端还是小端都是这样,不一样的在于字节之间的先后顺序 -
通过上图,也可以看出,vs2019的低位存放于低地址,高位存放于高地址,所以他是一个小端存储。