RAM(内存)和 Cache(缓存)终于理清了

本文深入探讨了RAM(内存)和Cache(缓存)的区别和联系,解释了为什么Cache容量小、价格高,以及为什么比RAM快。Cache通过利用局部性原则提高性能,而RAM作为大容量存储,两者在速度与容量之间取得平衡。文章还讨论了L1 Cache容量20年来未显著发展的原因,并阐述了Cache昂贵的根源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主页: 元存储博客

引子

晚上从锅里(内存)里盛出来一碗香喷喷的卤牛肉到碗里(CPU缓存)上,在电视前吃的美滋滋的,脑海里蹦出一个伟大发明,要是碗有锅那么大就好了。。。。。。

1. 基本概念

在这里插入图片描述

1.1 RAM 内存
RAM 是计算机存储操作系统、应用程序和数据的主要内存。

1.2 Cache 缓存
缓存是用于存储频繁访问的数据和指令以加快处理时间的少量内存。缓存速度更快,但容量比 RAM 小,而且更贵。另一方面,RAM 更便宜且容量更大。

高速缓存旨在利用局部性原则,该原则指出程序倾向于重复访问相对较小的数据和指令。通过将经常访问的数据存储在缓存中,CPU 可以避免访问速度较慢的 RAM,从而提高性能[2]。

缓存作为内存cache as RAM)是一种将计算机缓存作为虚拟内存使用的方法,这种方法通常用于嵌入式系统或其他资源受限的环境中。下面是一个使用缓存作为内存的示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <sys/mman.h> #define MEM_SIZE 4096 #define CACHE_SIZE 1024 int main(int argc, char *argv[]) { int fd = open("/dev/mem", O_RDWR); if (fd == -1) { perror("open"); exit(1); } void *mem = mmap(NULL, MEM_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); if (mem == MAP_FAILED) { perror("mmap"); exit(1); } void *cache = mem; // 使用缓存作为内存 // 使用缓存作为内存进行读写操作 int *data = (int *) cache; for (int i = 0; i < CACHE_SIZE; i++) { data[i] = i; } // 将缓存的内容写回到实际内存中 if (msync(mem, MEM_SIZE, MS_SYNC) == -1) { perror("msync"); exit(1); } if (munmap(mem, MEM_SIZE) == -1) { perror("munmap"); exit(1); } if (close(fd) == -1) { perror("close"); exit(1); } return 0; } ``` 在这个示例代码中,我们通过使用 `mmap` 函数将 `/dev/mem` 文件映射到程序的内存中,然后将缓存指针设置为映射的内存指针,从而实现了缓存作为内存的目的。在示例代码中,我们将缓存大小设置为 1024,实际内存大小设置为 4096,因此我们只能使用缓存中的一部分来存储数据。如果我们要访问实际内存中未映射的部分,可能会导致程序中断或发生其他问题。因此,在使用缓存作为内存时需要格外小心,确保不会访问到未映射的内存区域。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值