`
sunqichao
  • 浏览: 28631 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

ios 优化 cpu缓存与程序内存分布

阅读更多

今天看了一篇文章,关于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 缓存功能类"是一个专门设计来处理iOS应用中字符串和图片缓存的小型、高效工具。下面将详细介绍这类缓存机制及其相关知识点。 一、缓存...

    IOS 底层原理内存管理性能优化-课件

    6. **性能优化**:这包括了CPU和内存的优化,如避免无用的对象创建,合理使用缓存,减少计算量,以及使用 Instruments 工具进行性能分析和调优。此外,优化网络请求、图像处理和动画也是性能优化的重要部分。 7. **...

    swift-iOS性能优化总结

    内存泄露是iOS应用性能优化中的常见挑战,它可能导致应用程序无故崩溃或性能下降。Swift中,我们可以通过弱引用和无主引用来避免循环引用,使用`autoreleasepool`进行手动内存管理,以及利用Xcode的Instruments工具...

    iOS代码优化

    - UITableView是iOS应用中非常常见的组件,优化其性能不仅可以提高用户体验,还能减少内存使用量。 - 例如,通过减少不必要的单元格重绘、优化数据源的加载方式等手段来进行优化。 19. **优化网络请求** - 网络...

    iOS and macOS 性能优化

    在iOS和macOS平台上进行性能优化是开发过程中至关重要的一环,它关系到应用程序的响应速度、用户体验以及设备电池寿命。本资源"iOS and macOS 性能优化"提供了一个详细指南,帮助开发者提升应用的效率。以下是一些...

    iOS启动优化-二进制重排

    每一步都需要CPU从内存中读取指令和数据,如果这些元素分布不均匀,可能会导致频繁的缓存失效,降低启动效率。 具体来说,二进制重排通常包括以下几个方面: 1. **代码紧凑化**:将频繁调用的函数和紧密相关的代码...

    iOS性能优化检测.xmind.zip

    优化CPU使用的关键在于减少不必要的计算和线程竞争。多线程调度合理,避免阻塞主线程,使用高效的算法和数据结构,都能有效降低CPU使用。 3. **能源效率**:iOS设备电池寿命是用户关心的重点。优化能源效率意味着...

    清除缓存,包括显示内存大小

    当程序频繁访问的数据被存储在高速缓存中,可以显著减少主存与处理器之间的数据传输时间,从而提升整体性能。然而,随着时间的推移,缓存会积累大量的临时文件,可能会占用大量存储空间,甚至影响系统的运行效率。...

    ios-内存占用极低的gif动态图显示控件.zip

    由于GIF格式的特性,如果直接使用系统默认的方式加载,可能会导致应用程序内存占用急剧增加,甚至引发崩溃。针对这一问题,开发者们通常会寻找优化解决方案,而"ios-内存占用极低的gif动态图显示控件.zip"就是一种...

    下载网络图片 (整合多线程、内存缓存、本地文件缓存~)

    在Java中,可以使用ExecutorService和ThreadPoolExecutor来创建并管理线程池,合理分配系统资源,避免过度消耗CPU。 其次,内存缓存是一种优化策略,用于减少对磁盘I/O的依赖。在Android中,我们可以使用LruCache...

    Pro iOS Apps Performance Optimization2017

    1. **性能指标**:了解性能优化的基本概念,包括CPU使用率、内存占用、帧率(FPS)、能源效率和启动时间等关键指标。 2. **内存管理**:深入探讨Objective-C和Swift的内存管理机制,如ARC(Automatic Reference ...

    高清彩版 Pro iOS Apps Performance Optimization

    - **覆盖主题**:本书涵盖了一系列与iOS应用性能优化相关的主题,包括但不限于基准测试、表视图优化、图像缓存技术、算法和数据结构调整、多线程编程、内存管理等。 - **书籍结构与风格**:本书采用实践导向的方法,...

    iOS APP启动速度优化

    iOS APP的启动速度优化是提升用户体验的关键因素,尤其是在竞争激烈的移动应用市场中。启动速度不仅影响用户的第一印象,还可能直接影响用户的留存率。本文将详细分析App启动过程中的各个环节,并提出相应的优化策略...

    高性能IOS应用开发PDF版

    它专注于提供实用的技巧和最佳实践,帮助开发者在iOS平台上创建出运行流畅、效率卓越的应用程序。这本书的PDF版便于阅读和存储,可以轻松转换为其他电子书格式,避免了扫描版PDF可能存在的阅读不便。 在iOS应用开发...

    Pro iOS Apps performance optimization pdf+code

    《Pro iOS Apps Performance Optimization》是一本专注于提升iOS应用性能的专业书籍,它涵盖了多个关键领域,旨在帮助开发者构建更快、更高效、用户体验更好的应用程序。书中结合了理论与实践,提供了丰富的代码示例...

    swift-FolioImagePipeline是iOS客户端的图像加载和缓存框架

    它旨在优化应用程序中的图像显示性能,提供流畅的用户体验,同时减轻内存和CPU的压力。在这个框架中,开发者可以方便地管理和处理应用中的各种图像资源,无论是网络图片还是本地资源。 一、Swift开发 Swift作为苹果...

    ios-PerformanceBoard性能检测.zip

    在iOS开发领域,TBPerformanceView 是一个非常实用的性能检测工具,它可以帮助开发者实时查看并分析应用程序的CPU使用率、内存占用、FPS(帧率)以及网络请求等关键指标。 TBPerformanceView 是由Bintong在GitHub上...

    CPU漏洞分析——Meltdown与Spectre

    这两组漏洞利用了现代处理器硬件层面的执行加速机制中的实现缺陷,通过侧信道攻击,可以间接通过CPU缓存读取系统内存数据。这不仅威胁到了CPU的运作机制安全性,还可能导致低权限级别的攻击者远程泄露用户信息或者...

Global site tag (gtag.js) - Google Analytics