当前位置:   article > 正文

【C语言学习-实用调试技巧】使用vs2019使用调试使用内存窗口查看数据存储的显示问题_vs2019如何知道程序内存地址空间

vs2019如何知道程序内存地址空间

使用vs2019使用调试使用内存窗口查看数据存储的显示问题


  1. int main()
  2. {
  3. int arr[10] = { 0 };
  4. int i = 0;
  5. int sz = sizeof(arr) / sizeof(arr[0]);
  6. for ( i = 0; i < sz; i++)
  7. {
  8. arr[i] = i + 1;
  9. }
  10. for ( i = 0; i < sz; i++)
  11. {
  12. printf("%d\n", arr[i]);
  13. }
  14. }

这段代码例如当我将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组,那就是四个字节。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号