我有一个关于内存管理和Visual Studio中的内存窗口的问题



假设我有这样的代码:

#include<iostream>
using namespace std;
int main()
{
int a = 1633;
}

我在第4行放了一个断点,这样我就可以通过使用Visual Studio中的"内存"窗口来了解内存是如何分配的。我注意到,当我插入&a时,它会显示以下内容:

0x00CFF800  cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc 61 06 00 00 cc cc cc cc 3c

我知道我的变量是61 06 00 00,因为它被突出显示了。

问题:

  1. 为什么我在那个地址有所有这些元素,而不仅仅是a : 61 06 00 00

  2. 为什么写成那样?我知道有4个字节,但我不知道如何将代码转换为我的实际数字。那么,为什么61 06 00 00等于a=1633呢?

为什么我在地址中有所有这些元素

你没有。VS还会显示与变量相邻的字节。

最左边的cc在地址0x00CFF800,下一个cc0x00CFF801,依此类推

为什么会这样写?

每对符号代表一个字节,符号为十六进制数字。

字节从最低有效位到最高有效位排列(小端字节顺序(。

解释该值的最简单方法是:

  • 反转字节顺序:61 06 00 00->00 00 06 61
  • 将得到的十六进制数转换为十进制数:00000661(十六进制(->1633(十进制(

这相当于首先将每个单独的字节从十六进制转换为十进制:97 6 0 0,然后将这些值乘以256:97 * 256^0 + 6 * 256^1 + 0 * 256^2 + 0 * 256^3 = 97 + 6 * 256的幂。

最新更新