一、根据存储介质分
存储器按照不同的存储介质可以分为:内存和外存。
- 内存:存储在CPU外部但与CPU有高速率的数据传输通道连接的存储器。
- 外存:存储在CPU外部,与CPU的数据传输通道连接速度较慢且容量较大的存储器,如硬盘、U盘等。
二、按存储数据的时间特性分
存储器按存储数据的时间特性可以分为:易失性存储器和非易失性存储器。
- 易失性存储器:数据存在时间较短,如RAM。断电后数据将丢失。
- 非易失性存储器:断电后数据不会丢失,如ROM、Flash等。
三、根据存储单元的结构分
存储器按存储单元的结构可以分为:串行存储器和并行存储器。
- 串行存储器:按位进行存储,适用于数据量较小的场景,如寄存器。
- 并行存储器:按字(位组)进行存储,适用于数据量较大的场景,如RAM、Flash等。
四、根据读写特点分
存储器按读写特点可以分为:随机存储器和顺序存储器。
- 随机存储器:可以随机读写任意一个存储单元,如SRAM、DRAM。
- 顺序存储器:只能按照存入的次序顺序读写存储单元,如磁带机、光盘等。
五、根据存储单元的寻址方式分
存储器按存储单元的寻址方式可以分为:直接寻址存储器和间接寻址存储器。
- 直接寻址存储器:通过地址码能够直接访问到存储器中的存储单元,如RAM、ROM等。
- 间接寻址存储器:通过地址码只能访问一个寄存器或计数器,再通过该寄存器或计数器所存储的地址码才能访问到存储器中的存储单元,如Cache等。
六、示例代码
#include <stdio.h>
int main()
{
// 声明和定义一个数组,存储在内存中
int arr[5] = {1, 2, 3, 4, 5};
// 声明和定义一个指针变量,存储在内存中
int* p = arr;
// 获取数组元素并打印
for(int i = 0; i < 5; i++)
{
printf("%d ", *(p + i));
}
printf("\n");
// 分配内存并打印
int* ptr = (int*)malloc(sizeof(int) * 5);
for(int i = 0; i < 5; i++)
{
ptr[i] = i;
printf("%d ", *(ptr + i));
}
printf("\n");
// 释放内存
free(ptr);
return 0;
}