Cache存储器:电脑中为高速缓冲存储器,是位于CPU和主存储器DRAM(Dynamic Random Access Memory)之间,规模较小,但速度很高的存储器,通常由SRAM(Static Random Access Memory 静态存储器)组成。它是位于CPU与内存间的一种容量较小但速度很高的存储器。CPU的速度远高于内存,当CPU直接从内存中存取数据时要等待一定时间周期,而Cache则可以保存CPU刚用过或循环使用的一部分数据,如果CPU需要再次使用该部分数据时可从Cache中直接调用,这样就避免了重复存取数据,减少了CPU的等待时间,因而提高了系统的效率。Cache又分为L1Cache(一级缓存)和L2Cache(二级缓存),L1Cache主要是集成在CPU内部,而L2Cache集成在主板上或是CPU上。

C++测试cache大小

代码

/*
* 代码思路:创建一个连续内存块,进行连贯、大量、随机的有意义访问,要保证整块内存尽可能全部放入cache。当
* 内存被整块放入cache中时,访问速度会明显加快,直到有一个时间跳跃点,消耗时间增多,则这个跳跃点的存储容* 量大小即为cache大小
*/ #include <iostream>
#include <random>
#include <ctime>
#include <algorithm> #define KB(x) ((size_t)(x) << 10) using namespace std; int main()
{
// 需要测试的数组的大小
vector<size_t> sizes_KB;
for (int i = 1; i < 18; i++)
{
sizes_KB.push_back(1 << i);
}
random_device rd;
// 伪随机数算法,计算更快,占用内存更少
mt19937 gen(rd()); for (size_t size : sizes_KB)
{
// 离散均匀分布类
uniform_int_distribution<> dis(0, KB(size) - 1);
// 创建连续内存块
vector<char> memory(KB(size));
// 在内存中填入内容
fill(memory.begin(), memory.end(), 1); int dummy = 0; // 在内存上进行大量的随机访问并计时
clock_t begin = clock();
// 1<<25:将1左移25位,进行大量随机访问
for (int i = 0; i < (1 << 25); i++)
{
dummy += memory[dis(gen)];
}
clock_t end = clock(); // 输出
double elapsed_secs = double(end - begin) / CLOCKS_PER_SEC;
cout << size << " KB, " << elapsed_secs << "secs, dummy:" << dummy << endl;
}
}

运行结果

解析

由运行结果可以看出,内存访问时间在 8192KB 的时候发生了跳跃,由此推测cache的大小在 8192KB 左右,即8M左右,下面会进行验证。

ubuntu查看cahce大小

在命令行中输入如下代码:

getconf -a | grep CACHE

在本机环境中得到如下测试结果:

6291456/1024/1024 = 6M,所以本机chche大小为6M,与代码测试结果大体相符

最新文章

  1. linux命令大全
  2. React Native 中 CSS 的使用
  3. java的执行与加载的过程
  4. Ubuntu 12.10使用apt安装Oracle/Sun JDK
  5. 解决 HttpClient 模拟 http 的get 请求后 ,出现 403 错误
  6. Nginx/LVS/HAProxy负载均衡软件的优缺点详解
  7. php获取当前url完整地址
  8. Linux下root密码忘记的解决办法
  9. ASP.NET (HttpModule,HttpHandler)
  10. 与ARM7相比Cortex-M3优势明显
  11. VirtualBox扩展磁盘空间
  12. DirectFB 之 FillRectangle 绘制矩形
  13. Docker Registry
  14. Java课程设计博客(个人)
  15. 主从DB与cache一致性
  16. windows下如何查看端口,关闭端口,开启端口
  17. EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY&#39;RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.
  18. GridView1 RowDataBound
  19. Bootstrap-Other:Less 教程
  20. 用 go 写 WebAssembly入门

热门文章

  1. 浅谈Java中的命名规范
  2. Nginx多种负载均衡策略搭建
  3. java基础(1)-几种获取类的扩展方式
  4. 用composer安装php代码(以安装phpmailer为例)
  5. Unity Shader常用函数,标签,指令,宏总结(持续更新)
  6. Spring注解之-自定义注解
  7. linux下用户权限划分
  8. Node中的cookie的使用
  9. Java多线程(五):死锁
  10. ECharts 地图绘制与钻取简易接口