您现在的位置是:首页 >技术杂谈 >【初识c语言】地址及其内存的简介网站首页技术杂谈
【初识c语言】地址及其内存的简介
晚钟悠然追为你
回声两度为你作答
暗夜逆流而上
树根在秘密发电
你的果园亮了
我径直走向你
带领所有他乡之路
当火焰试穿大雪
日落封存帝国
大地之书翻到此刻
————节选 北岛《路歌》
一. 内存的简介:
在计算机的组成结构中,有一个很重要的部分,就是储存器。储存器是用来存储程序和数据的部件,对于计算机来说,有了储存器,才有记忆功能,才能保证正常工作。存储器的种类很多,按其用途可分为主储存器和辅助存储器,主存储器又称内存储器。内存又称主存,是cpu能直接寻址的存储空间,由半导体器件制成。内存的特点是存取内存速度快。内存是电脑中的主要部件,它是相对于外存而言的。我们平常使用的程序,如Windows操作系统,打字软件,游戏软件等,一般都是安装在硬盘等
在外存上的,但因此是不能使用其功能的,必须把它们调用内存中运行,才是真正使用其功能,我们平时输入一段文字,或玩一个游戏,其实都是在内存中进行的。就好比在一个书房里,存放书籍的书架和书柜相当于电脑的外存,而我们工作的办工桌就是内存,通常我们把要永久保存的,大量的数据存储在外存上,而把一些临时的或少量的数据和程序放在内存上。而内存的好坏会直接影响电脑的运行速度。
内存中常见的存储单位(从小到大):Bit(比特位),Byte(字节),KB(千字节),MB(兆字节),GB(千兆字节),TB(太字节)
以上的换算关系为:
1 Bit = 8 Byte;
1 KB = 1024 Byte;
1 MB = 1024 KB;
1 GB = 1024 MB;
1 TB = 1024 GB;
内存的换算率为1024,即是2^32。
为了有效的使用内存,把内存划分为一个个小的内存单元,每个内存单元的大小是一个字节。
你可以把这个内存想象成这个逼样
内存 |
一个字节 |
一个字节 |
一个字节 |
一个字节 |
. |
. |
. |
. |
. |
. |
. |
. |
一个字节 |
一个字节 |
一个字节 |
一个字节 |
一个字节 |
顺嘴一提,在c语言中,不同数据类型所占内存空间大小不同,以64位机和64位编译器为例
数据类型 | 占内存空间 |
char | 1个字节 |
char * | 8个字节 |
int | 4个字节 |
short int | 2个字节 |
unsigned int | 4个字节 |
float | 4个字节 |
double | 8个字节 |
long | 8个字节 |
long long | 8个字节 |
二.地址的简介
1.地址是什么?
地址是内存中一个最小单元的编号。前面提到了内存是用来存储数据的空间,那它一定是有编号的,找到内存必须先访问地址,就比如学校里的每一个宿舍都有自己的宿舍号,没有宿舍号阿姨怎么找对宿舍进行查寝(这么好?)。
2.地址是如何产生?
在计算机上,有地址线,纯纯物理上的电线,是电线肯定要通电,因为电压的问题,地址线通电后就会产生电信号,电信号分为高电平信号,低电平信号,之后会转换成数字信号,一般高电平信号代表数值 1,低电平信号代表数值 0,以32位机器为例,32位机器上有三十二根地址线,咱假设把地址线想象成这样
上图的地址线位有三十二根(对应的 0 / 1没有空间只能写少点),通电后每根地址线产生数字 1 或者 0,就产生了二进制 2^32的编号,这些编号,就作为了内存的地址来管理内存单元 ,2^32个编号就管理了2^32的字节,通过换算,管理的是 4GB 的内存空间,同理,如果是64位机器的话,那就管理的是 8GB的内存空间。
内存中是以什么进制显示地址的?
举个简单例子:
我们定义一个int 类型的变量,初始化 a = 15,(在计算机中,数据是以二进制的形式存储的)
简单展示一下 a 在内存的存储
然后我们看看从内存中看a的地址是什么:
因为 a 是int类型在内存占看4个字节的单元内存,自然就有4个地址,可是你在编译器上打印出来只会给你首地址(从下往上数的第一个),而且地址是以十六进制的形式在内存中表示的,因为,二进制的四位可以转换成十六进制的的一位,在内存的表达中更直观清晰些。
比如 a = 15以二进制的形式存入内存中
0000 0000 0000 0000 0000 0000 0000 0000 1110
而在内存以十六进制表示a的值
0x 00 00 0f
好了,咱今天就分享到这里,看官就顺便点个赞呗