1、硬件层面
内存就是名为内存IC的电子元件。(IC,集成电路,内存也是一种集成电路)
内存IC的引脚配置
那这个内存IC能存多少数据?
数据信号引脚有D0~D7一共8个,表示一次输入输出8位数据(一个字节)。地址信号引脚有A0~A9一共10个,可以指定1024个地址。1024B=1KB,所以此内存IC能存1KB容量。
现在内存至少有4G,4GB÷1KB=4M。如果你电脑内有400万个内存IC的话~一个房间能否装下都是问题。一般内存IC会用更多的地址引脚增加数据存储。
2、内存的工作
写入:给VCC接入+5V,给GND接入0V,用地址信号A0~A9指明地址,用数据信号D0~D7存储数据,把WR信号设为1,就可以进行写入操作了。
读出:只需通过地址信号A0~A9指明地址,RD信号设为1就可以进行读出操作。
3、内存的逻辑模型
可以把内存模型看成楼房,一层存一字节。
这里从下到上越来越小,也有越来越大的情况,这涉及到内存的读取顺序问题,是历史上著名的大端小端之争,以后看ICS的时候再细说。
4、「简单」的指针
到这里就比较好理解学C时头疼的指针了。指针是一种变量,它表示的不是数据的值,而是存储数据「的」内存「的」地址。Window计算机程序通常是32位内存地址,这种情况,指针变量的长度也是32位即4字节。
同理,64位操作系统内存地址是8字节,但是如果想高层封装一下,指针不一定非得那么多位,然后在系统里其实更多的谈到地址的概念,那个时候就是系统位数了
——热心的信科大佬
5、常见的数据结构与内存的关系
数组是内存最直接的用法。数组是多个同样数据类型的数据在内存中连续排列的格式。作为数组元素的各个数据通过连续的编号隔开,编号就是索引。指定索引后,可以进行指定地址的内存读写。索引和内存地址变换工作由编译器完成(卜众耀)。
栈和队列都可以不通过指定地址和索引来对数组的元素进行读写。如果在内存中预留栈和队列的空间,确定写入读出顺序,就不需要指定地址和索引。
链表则更简单,对各个元素操作时,除了数据的值,还附带下一个元素索引即可。
树的结构则是在链表基础上,附带多个元素索引。
关注有更多干货 ↓ 码文不易,给大家表演debug了