C语言之变量内存体现(VS编译器)

计算机中所有的数据都是以二进制形式表示的,一个字节(byte)=8位(bit)。

为了便于书写与理解,内存地址空间是用16进制的数据表示, 如0x8049324,因为十六进制更简短,换算的时候一位16进制数可以顶4位2进制数。(所以说内存地址与内存地址对应的值在计算机内部都是用二进制表示的,只不过人们把她抽象出来的时候用了简便的写法)
例如int类型占四个字节,他在计算机中的表示为00000000 00000000 00000000 00000000,
2^4=16,16进制是即逢16进1,所以满四位进1,一个十六进制数=0.5字节=4位。

有的用4位16进制数表示内存地址,另一种用8位16进制表示内存地址,这是因为有些cpu只能寻址16位(只有16根地址线),而有些cpu能寻址32位(有32位地址线)。地址线越多,能存储的存储单元的个数也就越多。但是无论内存里存储单元的个数有多大(即是4位16进制还是8位16进制表示内存地址),每一个存储单元的容量都是1字节。

C语言是最接近硬件底层的语言,下面通过C语言来体现变量在内存中的存储情况。
在这里插入图片描述
C语言中0x代表十六进制数,定义一个int类型的变量num,它在内存中的体现如下图。
在这里插入图片描述
关于如何存放的问题,这跟cpu的大小端模式有关。一般cpu采用都是小端模式,即高字节存放高地址,低字节存放在低地址,读地址时从高地址开始读。所以编译器显示的时候还是从小到大显示。

当num为五个字节时,很明显,此时int类型(四个字节),已经存不下五个字节了。
按照大端模式的存放,低字节(10)存放在高地址的一个单元格中,但此时这个单元格不属于num这个变量占有的四个单元格内,
所以,0x10就并不显示了。

在这里插入图片描述

在VS中查看变量的存放

设置断点,打开调试模式,在代码空白处右击选择快速监视
输入 &变量 ,点击重新计算,获得a的地址
在这里插入图片描述
在这里插入图片描述
输入a的地址,可以看到从低地址到高地址,高地址(如00)存放高位,低地址存放在低位(04),带点的就是变量a的存放地址,一个四个字节。

一个变量的地址值,是它所有字节地址中的最小值

在这里插入图片描述
所以int类型能存储的最大数值是2^32

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章