Jason

If they throw stones at you, don’t throw back, use them to build your own foundation instead.

导航

C语言回忆录,内存地址篇(一)

申明:本人并非专业C语言学习者,所有文章仅供个人作为笔记参考,其中也有网络上的摘抄,指出错误的朋友本人在此表示感谢。

首先说说C语言的头文件,最常见的引用当然就是 #include<stdio.h>标准I/O库,其中详细头文件表http://yunpan.cn/Q5b59kWcTJreF 访问密码 1943.

C语言的灵魂当然就是指针,但是指针是什么呢,显而易见,指针就是地址。有了指针,我们可以直接对内存进行操作。指针直接操作内存对于我们来说是既爱又恨,爱是因为它能拥有足够的自由,恨它是因为它的自由给内存回收带来了很多的麻烦,甚至会造成内存泄漏。

我们知道,计算机的核心为CPU,可是我们知道计算机是以二进制为基础,CPU只能接受二进制指令,我们的C语言是通过编译来控制Cpu。当然,程序是无法对Cpu进行直接的操作,这就得我们通过指针来操作内存,再由内存与Cpu进行互动。

这里我们就产生了一个疑问,内存又是怎么来和Cpu互动或是操作呢?

这里就必须说到Cpu到内存的三根线分别是:地址线,控制线,数据线。地址线是Cpu对内存进行寻址,也就是用来传输地址信息用的,举个简单的例子:Cpu在内存或者硬盘里面寻找一个数据时,先通过地址线找到地址,然后再通过地址线将数据取出来,如果有32根.就可以访问2的32次方的空间,也就是4GB.也就是我们说的32位/64位寻址。控制线我个人简单地理解为用来识别“读”或者“写”的操作。数据线当然是用在Cpu和内存之间传送数据。

那Cpu是怎么能够准确找到内存地址呢?我们在内存中虚拟地分出很多小格子(听说在内存条表面也有,内存条上黑色方块的数量,一个黑色方块就是一个内存单元,有的内存条上的内存单元分正反两面安装,这样的内存单元应该做双数计算,比如正面有八个背面有八个就是十六个内存单元!反之如果是单面的就是八个内存单元,用你的内存大小除以单元数量就是内存单元的存储量大小!),这些格子被我们叫做内存单元,每个内存单元为1字节=8bit,详情参考线面这段话:

简单的说,是通过坐标定位。就像看地图一样,不需要把地图每个点都翻出来。 知道操作系统通知的逻辑地址后,就可以确定物理地址,具体在内存单元的操作如下:它先定出横坐标(也就是“列地址”)再定出纵坐标(也就是“行地址”),这就好像在地图上画个十字标记一样,非常准确地定出这个地方。对于电脑系统而言,找出这个地方时还必须确定是否位置正确,因此电脑还必须判读该地址的信号,横坐标有横坐标的信号(也就是RAS信号,Row Address Strobe)纵坐标有纵坐标的信号(也就是CAS信号,Column Address Strobe),最后再进行读或写的动作。 

 

 

posted on 2013-05-28 10:18  Jason-Y  阅读(262)  评论(0)    收藏  举报