今天看了一篇文章,关于CPU Cache的7个示例科普CPU Cache
突然发现原来自己不知道的东西有这么多,翻查了一些资料,学到了好多东西,所以赶紧记下来,以后忘了的时候翻出来看看
作为程序员,有必要知道cpu是怎么拿到数据然后处理数据的,优化程序很多都是从这一点做起,这也是我一直想知道的,之前学计算机组成原理和操作系统,没怎么认真学,现在才发现原来这些都是很重要的基础课,如果一个程序员连自己的代码是怎么在机器上运行的都不知道的话,那他就打不出好的代码。以前也只懵懵懂懂的知道,访问内存才会消耗cpu,但根本的都没去了解,今天算是一口气解决了自己的好多疑问
首先你得知道cache这个东西,非常有必要了解清楚,特别是概念和起执行的原理,网上搜一下,一大堆
cache里的基本存储单元是cacheline即缓存行,缓存通常分为一级缓存和二级缓存,有些还有三级缓存,通常数据传递路线是硬盘到内存到二级缓存到一级缓存再到cpu寄存器,cpu读取数据时,首先会先从一级缓存那里读取,如果该数据存在的话(即cache命中),直接取出数据,这里并没有访问内存,如果数据不在一级缓存,cpu就会到二级缓存那里寻找,同样,如果存在则直接取出数据,如果不存在,那就得从内存载入该数据了,这时就需要访问一次内存,缓存就是为了提高cpu的工作效率。
了解系统的内存管理机制也是很重要的,Windows系统为每个进程都分配了4g的虚拟内存地址,内核占了2g,剩余的空间有栈区、堆区、全局数据区和代码区等,中间还有其他的,总结起来就是动态数据区、代码区和静态数据区。C++中每个程序的内存分配为代码区、全局数据区、堆区和栈区
C++的内存分配方式有三种:
1、从静态存储区域分配
编译时就分配好,运行期间一直存在,如全局变量、静态变量
2、在栈上分配
函数内局部变量,函数执行完后自动释放,内置于处理器的指令集中,效率很高,内存容量有限
3、在堆上分配(动态内存分配)
malloc或new申请,free或delete释放
其实对于局部变量,为何效率快呢,比较准确的说法是,局部变量在函数体中被多次引用时,该变量会被放入到缓存里,所以每次读取数据,只要其存在在缓存中就不会去访问内存,但其实如果你在函数体中对局部变量和静态变量做同样次数的引用时,执行时间是一样长的,几行代码就可以测试出来了
所以程序设计要尽量满足局部性原理,局部性原理又分为时间局部性和空间局部性,时间局部性是指如果程序中的某条指令一旦执行,则不久之后该指令可能再次被执行;如果某数据被访问,则不久之后该数据可能再次被访问。空间局部性是指一旦程序访问了某个存储单元,则不久之后。其附近的存储单元也将被访问。附近即具有连续地址 。
关于内存管理的东西还有很多,每天累积一点点,学到了就记下来。
相关推荐
这篇文章将介绍一下如何在iOS设备中进行缓存,本文先介绍一下将内容缓存到内存中,下一篇文章就介绍一下在iOS磁盘上缓存内容。
IOS CPU 内存 网络流量 性能数据监控
ios通过SQLite自定义数据缓存
1.ios系统当前内存显示 2.label显示当前内存
iOS离线缓存: github地址:https://github.com/hrscy/OfflineCache 简书地址:http://www.jianshu.com/p/426c66e46f9e
在设置界面总是遇见清除缓存的地方,还用部分号码需要截取一部分星号隐藏
用Instrument 监测的Log 日志,可供参考
在开发移动应用的时候比如Android,IOS,因为手机流量、网速、内存等这些因素,当我们的移动应用是针对互联网,并要频繁访问网络的话,对网络优化这块就显得尤为重要了
iOS 任务调度器,为 CPU 和内存减负
FBMemoryProfiler是Facebook开源的一款用于分析iOS内存使用和检测循环引用的工具库。手机设备的内存是一个共享资源。应用程序可能会不当的耗尽内存、崩溃,或者遭遇大幅度的性能降低。当分配了一块内存,并设置了...
iOS开发学习笔记之内存分配图示.虚拟内存分配图示
OOMDetector是一个iOS内存监控组件,应用此组件可以帮助你轻松实现OOM监控、大内存分配监控、内存泄漏检测等功能。 特性 1.OOM监控:监控OOM,Dump引起爆内存的堆栈 2.大内存分配监控:监控单次大块内存分配,提供...
iOSAPP跳转微信小程序的Demo,仅用于演示作用,集成细节在博客中有详细介绍,可移驾这里:https://blog.csdn.net/fuzheng0301/article/details/100036332
NULL 博文链接:https://zhangmingwei.iteye.com/blog/2092097
网络请求是基于AF封装的,自定义缓存时间和永久缓存,非常方便
这是一个异步加载 图片缓存管理的小例子 简化对网络图片加载的处理
庄延军《iOS内存管理及优化》,一本不错的关于ios内存管理的书。
这个功能类文件很小,代码量也很少,使用很简单,主要功能是给iOS项目做一些字符串和图片的缓存
项目中我是这样干的,多次点都OK
深入剖析iOS性能优化.pdf