赞
踩
使用vs2019使用调试使用内存窗口查看数据存储的显示问题
- int main()
- {
- int arr[10] = { 0 };
- int i = 0;
-
- int sz = sizeof(arr) / sizeof(arr[0]);
- for ( i = 0; i < sz; i++)
- {
- arr[i] = i + 1;
-
- }
-
- for ( i = 0; i < sz; i++)
- {
- printf("%d\n", arr[i]);
- }
- }
这段代码例如当我将arr[0]赋值为1时,使用调试窗口查看内存发现存储的是这样的形式,如下图所示。
可以看到数组首元素地址为0x007FFDA4,存储的值为01 00 00 00,那为什么这样一个整型用四个字节存储起来会是01 00 00 00这样的形式呢?
原因如下:
① 在内存中,数据存储通常是以字节为单位的,具体如何存储取决于计算机的体系结构和编程语言的数据类型。在典型的小端序计算机体系结构中,较低地址存储了整数的最低有效字节(最低位),而较高地址存储了整数的最高有效字节(最高位)。
小端序(Little-Endian)计算机体系结构:01 00 00 00
大端序(Big-Endian)计算机体系结构:00 00 00 01
由此可见vs2019采用的是小端序的计算机体系结构
② 每个字节由两个十六进制数字表示。这是因为在典型的计算机体系结构中,整数通常占据四个字节(32位),每个字节由两个十六进制数字表示。
第一个字节(01)包含整数的最低有效位。
第二个字节(00)包含整数的次低有效位。
第三个字节(00)包含整数的次高有效位。
第四个字节(00)包含整数的最高有效位。
③ 众所周知,8个bit位表示一个字节,每个字节由两个十六进制数字表示,这两个数字分别表示字节中的不同的四位二进制位。在十六进制表示中,每个十六进制数字对应四位二进制数。
以 "01" 为例:
第一个十六进制数字 "0" 对应四位二进制数 "0000"。
第二个十六进制数字 "1" 对应四位二进制数 "0001"
所以这两个十六进制位所表示出来的数字01就需要8个bit位,所以就是一个字节。这有4组,那就是四个字节。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。