天天看点

火山PC【视窗】内存和指针基础知识讲解火山PC内存和指针基础知识讲解

火山PC内存和指针基础知识讲解

本文作者:灰羊羊

一、内存和外存

   本文来介绍一下内存,内存内存,顾名思义是计算机的内部存储,那么有没有外部存储?

自然是有的,外存就是硬盘磁盘之类的,外存最显著的作用是可以长时间的存储数据,将数据保存在硬盘上,关闭电脑数据不会丢失

至于本文的重点是内存,熟悉电脑硬件的都知道,主板上有个内存条,一般常见的内存条有4G,8G,16G等等,而一个硬盘存储容量有

1T(100G),或者更多

   那么为什么内存和外存的容量会有这么大的区别?

二、CPU和内存容量

   首先,内存是CPU存放处理数据的仓库,如果没有内存,CPU本身的容量大概只有10MB左右,CPU在工作时,需要先将外存的数据读取到内存之中,然后才能进行进一步的工作

   这时候,问题就来了,一个CPU可以把多少数据存到内存中?拿32位系统来说,假设地址总线为32,32位操作系统支持的内存是2的32次方byte,也就是4294967296 这个单位是b

   根据b,kb,mb,GB的换算公式,可以计算出这个数值是4G,64位操作系统理论上的寻址空间为2的64次方bit,转化单位为GB,那也就是2147483648GB

    以上只是理论数据,具体还要看其他影响

三、内存和外存应用举例

   我们打开火山平台,新建个项目,写好代码,在未保存前,我们所有的数据都在内存中保留,只有我们保存之后,这些数据才会被写入外存(硬盘)中转为长时间保存的文件

四、内存存储介绍

    上面已经说过了,计算机的内存是一块用于存储数据的空间,并且数据在内存中以二进制形式存储,像下面这样,一个bit就是一个高低电平,可以理解为0和1

火山PC【视窗】内存和指针基础知识讲解火山PC内存和指针基础知识讲解

相信您对内存地址并不陌生,那么下面来看看内存地址是怎么来的

单个的1bit,对我们来说,并没有大的用处,所以,我们将8个bit捆绑在一起形成一个字节(byte),同时对每个byte进行编号,这就形成了地址,同时也要保证,地址不能重复,地址编号以16进制来记录

火山PC【视窗】内存和指针基础知识讲解火山PC内存和指针基础知识讲解

五、变量在内存中存储

来看看一个int型(整数)的变量是怎么存放在内存中的,首先,您需要知道一个整数的二进制补码是多少

比如说,定义一个变量为 a=5789

5789的二进制数据为0001 0110 1001 1101,这里通过微软自带的计算器程序员模式就可以计算出来

火山PC【视窗】内存和指针基础知识讲解火山PC内存和指针基础知识讲解

二进制数据在内存中以补码的形式存放

十进制数5789的二进制补码为补码是0001 0110 1001 1101,至于什么是补码,您可以百度,或者是用计算器算一下

下面附一张计算器的图,这里不对补码做介绍

火山PC【视窗】内存和指针基础知识讲解火山PC内存和指针基础知识讲解

上面5789的二进制补码占到了16位,所以,需要两字节的空间存储

而int数据是四字节,所以,没有用到的位在前面补0既可以了,结果是

0000 0000 0000 0000 0001 0110 1001 1101  前面补了16个0,这加起来,就是32bit,四字节

将数据放在内存中,先这样子看,一个字节可以存8bit,按下图放入数据,这个变量a的地址是0X01,存放数据的首地址为变量的地址

可以理解为,0X01到0X04都是变量a的,但是用0X01来表示变量a的地址

火山PC【视窗】内存和指针基础知识讲解火山PC内存和指针基础知识讲解

您可以看一下,这样子,前面的2字节是0,把高字节位放在了低地址上

将低字节放在了高地址位,这样子,您这个变量会这样子显示,计算方式是将8位二进制数据转化成十六进制

地址:0X01  00 00 16 9D

您见过以字节为0开头的数据吗,并没有

所以,我们将数据位置翻转一下,存放在内存中,这叫做大小端,内存中的数据均需要进行大小端的转化

经过转化的地址为:0X01 9D 16 00 00

火山PC【视窗】内存和指针基础知识讲解火山PC内存和指针基础知识讲解

注意:上图例子中,变量a的首地址是0X01,所以,使用取变量地址,取出来的结果是0X01而不是其他值

然后呢,我们在火山中创建这个变量,然后看一下地址数据,这里,字节集数据是不是和上面的一致呢

火山PC【视窗】内存和指针基础知识讲解火山PC内存和指针基础知识讲解

以上就是内存的基础知识,下面让我们一起来学习指针和指针偏移

总结:数据存储在内存中(不是永久保存,临时的),存储的时候,以二进制的补码形式,然后经过大小端(位置翻转)变化后,存储

继续阅读