自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 资源 (40)
  • 收藏
  • 关注

翻译 C++性能优化笔记-16-嵌入式系统中的优化

嵌入式系统中的优化小型嵌入式应用中使用的微控制器的计算资源少于标准PC。时钟频率可能比标准PC低一百倍甚至一千倍;内存量甚至可能比PC机少一百万倍。然而,如果您避免大型图形框架、解释器、即时编译器、系统数据库和其他通常在大型系统上使用的额外软件层和框架,就有可能使软件在如此小的设备上运行得相当快。系统越小,选择使用很少资源的软件框架就越重要。在最小的设备上,您甚至没有操作系统。最好的性能是通过选择一种可以在PC机上交叉编译的编程语言,然后把机器代码传输到设备上。任何需要在设备上编译或解释的语言都是对资

2021-09-27 19:43:06 266

原创 C++性能优化笔记-15-测试执行速度

测试执行速度使用性能监视器计数单元测试的陷阱最坏情况测试测试程序的速度是优化工作的一个重要部分。你必须检查你的修改是否确实提高了速度。有各种各样的分析器可用于查找热点和测量程序的总体性能。然而,分析器并不总是准确的,当程序花费大部分时间等待用户输入或读取磁盘文件时,可能很难准确测量您想要的内容。有关分析的讨论,请参见执行时间分析。确定热点后,隔离热点并仅对代码的这一部分进行测量可能很有用。这可以通过使用所谓的时间戳计数器获取CPU时钟周期来完成。这是一个计数器,用于测量CPU启动后的时钟脉冲数。时钟周

2021-09-27 19:00:32 898

原创 C++性能优化笔记-14-元编程

元编程模板元编程编译期常量分支元编程编译期常量函数元编程元编程意味着开发可以生成代码的代码。例如,在解释型脚本语言中,通常可以开发一段生成字符串的代码,然后将此字符串解释为代码。元编程在编译型语言如C++中有帮助。如果计算所需的所有输入在编译时可知,则可以在编译时而不是在运行时进行计算。当然,在解释型语言中没有这样的优势,因为一切都在运行时发生。以下技术可以视为C++中的元编程:预处理器指令。例如,使用#if而不是if。这是一个非常有用的删除多余代码的方法,但有严重的限制,预处理器位于编译器之前,

2021-09-27 16:54:02 584

原创 C++性能优化笔记-13-特定优化主题

特定优化主题使用查找表边界检查使用位操作符一次检测多个值整数乘法整数除法浮点除法不要混合使用浮点和双精度浮点数和整数的转换在浮点变量乘法中使用整数操作数学函数静态库VS动态库位置无关代码系统编程使用查找表如果缓存了常数表,则从该表读取值的速度非常快。通常,从一级cache中的表读取值只需要几个时钟周期。利用这一事实,如果函数只有有限数量的输入,我们可以通过用表查找来替换函数调用。让我们以整数阶乘函数(n!)为例。唯一允许的输入是0到12之间的整数。高输入产生溢出,负输入产生无穷大。阶乘函数的典型实现如

2021-09-26 20:58:24 429

原创 C++性能优化笔记-12-开发兼容多个指令集的关键代码

开发兼容多个指令集的关键代码CPU调度策略模型相关调度不同场景测试和维护实现Linux中加载阶段的CPU调度Intel编译器中的CPU调度微处理器制造商会不断添加新指令到指令集中,从而让直行速度更快。使用新指令集的坏处是和旧型号的微处理器不兼容。这个困境可以通过让代码的关键部分兼容多个版本的指令集来解决。这叫CPU调度。应用程序应该自动侦测CPU和操作系统支持哪个指令集,进而选择为最内层的关键循环选择合适的子程序版本。CPU调度策略开发一段支持多指令集的代码代价是高昂的-在开发、测试和维护方面。把这些

2021-09-24 15:21:37 886

原创 C++性能优化笔记-11-使用向量操作

使用向量操作AVX指令集和YMM寄存器AVX512指令集和ZMM寄存器自动向量化使用内建函数对齐数据向量化表查找使用向量类向量类的CPU分发转换串行代码到向量化代码数学函数的向量化对齐动态分配的内存对齐RGB视频或三维向量结论今天的微处理器有向量指令,这让在一个向量的所有元素上进行操作成为可能。这样叫单指令多数据(SIMD)操作。每个向量的大小可以是64位(MMX),128位(XMM),256位(YMM)和512位(ZMM)。当需要在大数据集上,对多个数据执行相同的操作,并且程序逻辑也允许时,向量操作是

2021-09-22 19:31:50 3623

原创 C++性能优化笔记-10-无序执行

无序执行无序执行无序执行所有现代的X86处理器都可以无序执行指令。下边的例子利用了这个能力:// Example 11.1afloat a, b, c, d, y;y = a + b + c + d;这个表达式按照((a+b)+c)+d)计算。这是一个依赖链。可以进行修改改善:// Example 11.1bfloat a, b, c, d, y;y = (a + b) + (c + d);现在(a+b)和(c+d)可以同时进行,可以节约几个时钟周期。不能假定编译器会自动进行上述优化

2021-09-22 10:44:50 195

原创 C++性能优化笔记-9-多线程

多线程线程同步CPU时钟频率限制于物理硬件因素。在时钟频率的限制下,提高CPU密集型程序吞吐量的方式是,同时进行多个任务。任务并行有三种方式:使用多个CPU或多核CPU;利用现在CPU的乱序能力;利用现代CPU的向量操作;为了利用CPU的多核能力,需要把问题拆分为多个线程。线程同步...

2021-09-18 14:38:25 1601

原创 expected unqualified-id before numeric constant

在编译开源的第三方库时,可能会遇到错误:expected unqualified-id before numeric constant分析后发现,是自己定义的枚举变量名与第三方库中的同名了,导致变量重复定义。解决方法:自己的类型加上命名空间自定义的类型添加特定的前缀...

2021-09-17 17:22:47 7488

原创 在QT的信号槽中使用自定义数据类型

qt中使用信号槽来处理GUI与后台数据同步是不错的。耗时的任务可以在处理完数据后使用信号通知UI更新。对于qt中的已有类型,可以直接使用。但,多数时候都需要用到自定义类型。如果像内建类型那样使用,编译时正常,但运行时会报错:QObject::connect: Cannot queue arguments of type 'xxxx' (Make sure 'xxxx' is registed using qRegisterMetaType().)原因:在跨线程进行信号槽连接时,为了不阻塞发送信号的线程,

2021-09-17 17:15:41 828

原创 C++性能优化笔记-8-优化存储访问

优化存储访问优化存储访问代码和数据缓存缓存组织一起使用的函数应该存储在一起一起使用的变量应该存储在一起数据对齐动态内存分配数据结构和容器类字符串顺序访问数据大数据结构中的cache冲突显式cache控制优化存储访问代码和数据缓存缓存是主存的代理。缓存是为了以最快的可能访问最常用的数据。缓存组织大多数chache以行和集合的方式组织。cache机制的更多细节,参考(en.wikipedia.org/wiki/L2_cache)。如果程序中包含很多变量和对象,它们又刚好分布在映射到相同cache的内

2021-09-17 16:14:32 1179

原创 C++性能优化笔记-7-编译器中的优化-5-编译器做了什么

编译器中的优化检查编译器做了什么检查编译器做了什么研究编译器产生的代码,看它优化代码的程度,是非常有用的。有时,编译器会相当奇妙地使代码更高效,有时它蠢得难以置信。看编译器输出通常可以透露出什么可以通过修改源代码来改进,如下面例子所示。检查编译器产生代码最好的方式是使用汇编语言输出的编译器选项。在大多数编译器上,你可以通过从命令行使用相关优化选项,以及汇编输出的选项-S或/Fa,调用编译器来完成。在某些系统上,IDE也有可用的汇编输出选项。如果编译器没有汇编输出选项,使用目标文件反汇编器。注意,In

2021-09-13 17:01:16 297

原创 C++性能优化笔记-7-编译器中的优化-4-编译器优化选项、优化指令

编译器中的优化编译器优化选项优化指令编译器优化选项所有C++编译器有各种你可以打开、关闭的优化选项。学习正在使用编译器可用的选项,并打开所有相关选项,是重要的。许多优化选项与调试不兼容。调试器可以一次执行一行代码,并显示所有变量的值。显然,在部分代码被重排、内联或优化掉时,这是不可能的。通常制作可执行程序的两个版本:带有完整调试支持,在程序开发期间使用的调试版本,以及打开所有相关优化选项的发布版本。大多数IDE(集成开发环境)有制作目标文件与可执行文件的调试版本与发布版本的设施。确保区分这两个版本,在

2021-09-12 17:07:19 1684

原创 C++性能优化笔记-7-编译器中的优化-3-编译器、CPU优化的障碍

编译器中的优化编译器优化的障碍不能跨模块优化指针别名动态内存分配纯函数虚函数与函数指针代数化简浮点归纳变量具有非内联拷贝的内联函数CPU优化的障碍编译器优化的障碍有几个因素会阻止编译器进行预期的优化。程序员知道这些障碍并知道如何避免它们。优化的某些重要的障碍讨论如下。不能跨模块优化编译器没有除正在编译模块以外其他模块中的函数信息。这阻止了跨函数调用的优化。如:// Example 8.20**module1.cpp**int Func1(int x) { return x*x +

2021-09-12 14:30:18 739

原创 C++性能优化笔记-7-编译器中的优化-2-不同编译器的对比

编译器中的优化不同编译器的对比不同编译器的对比下表对比了不同的编译器的优化效果。必须强调的是,编译器在不同的测试例子上可能表现不同。下表仅供参考。优化方法GnuClangMicrosoftIntel通用优化函数内联xxxx常量折叠xxxx常量传播xxxx循环的常量传播xx--指针消除xxxx公共子表达式消除xxxx寄存器变量xxxxFused multiply a

2021-09-11 17:14:08 568

原创 C++性能优化笔记-7-编译器中的优化-1-编译器如何优化代码

编译器中的优化编译器如何优化函数内联常量折叠和常量传播指针消除公共子表达式消除寄存器变量生命周期分析合并相同的分支消除跳转循环展开循环不变代码移动归纳变量调度代数化简去虚拟化编译器如何优化现代编译器能够对代码做很多修改,以提高性能。了解编译器可以做什么,不可以做什么,对开发者来说是有用的。下边的小节描述了开发者需要了解的一些编译器优化的内容。函数内联编译器可以用被调用函数体来替换原来的函数调用。例子:// Example 8.1afloat square (float a) { re

2021-09-10 18:56:07 1391 1

原创 C++性能优化笔记-6-C++元素的效率差异-18-预处理和命名空间

C++元素的效率差异预处理指令命名空间预处理指令就程序性能而言,预处理指示(所有以#开头的东西)是没有代价的,因为它们在程序编译前被解决了。#if指令用于支持多平台或同一个源代码的多种配置。#if比if更高效,因为#if在编译时解析,而if在运行时。在用于定义常量时,#define等价于const定义。例如,#define ABC 123与const int ABC = 123;一样高效,因为在大多数情形里,优化的编译器会用值替换一个整数常量。不过,在某些情形里,const int声明需要内存空间,

2021-09-08 18:39:34 172

原创 C++性能优化笔记-6-C++元素的效率差异-17-栈展开、NAN和INF传播

C++元素的效率差异栈回滚的其他情形NAN和INF的传播栈回滚的其他情形前面的章节描述了由异常处理使用的、称为栈回滚的机制,在异常出现时,不使用正常返回途径跳出函数后,由异常处理用来清理及调用所有必须的析构函数。这个机制也用在其他两个情形里:在线程终止时,可以使用栈回滚机制。目的是检测线程中声明的对象是否有需要调用的析构函数。建议在终止线程前,从要求清理的函数返回。不能确定的,_endthread()的调用会清理栈。取决于实现。在使用函数longjmp跳出一个函数时,也使用栈回滚机制。尽可能避免使

2021-09-08 18:29:30 110

原创 C++性能优化笔记-6-C++元素的效率差异-16-异常和错误处理

C++元素的效率差异异常与错误处理异常与向量代码避免异常处理的代价开发异常安全代码异常与错误处理运行时错误已发异常,这些异常可以通过陷阱或软件中断的形式被检测到。这些异常可以通过 try-catch 块捕捉到。程序会崩溃并产生一个错误消息,如果异常处理被启用并且没有 try-catch 块。异常处理的目的是检测很少出现的错误,并以一个优雅的方式从错误中恢复。你可能认为只要错误不发生,异常处理就不需要额外时间,但不幸的是,这不总是成立的。程序必须进行许多簿记以便知道如何从异常事件中恢复。这个簿记的代价很

2021-09-08 16:52:57 232

原创 C++性能优化笔记-6-C++元素的效率差异-14-模板

C++元素的效率差异模板模板就在编译前模板参数被它们的值替代而言,模板类似于宏。下面的例子展示了函数参数与模板参数间的差别:// Example 7.46int Multiply (int x, int m) {return x * m;}template int MultiplyBy (int x) {return x * m;}int a, b;a = Multiply(10,8);b = MultiplyBy<8>(10);a与b都将给出值10 * 8 = 80。差

2021-09-07 20:22:50 634

原创 C++性能优化笔记-6-C++元素的效率差异-11-结构体和类

C++元素的效率差异结构体和类类数据成员类成员函数(方法)虚函数运行时类型识别(RTTI)继承构造函数与析构函数结构体和类时至今日,编程教材推荐面向对象编程,作为使软件更清晰及模块化的一种手段。所谓的对象是结构体及类的实例。面向对象编程形式对程序性能有积极与消极的影响。积极的影响有:一起使用的变量也保存在一起,如果它们是结构体或类的成员。这使得数据缓存更高效。作为类成员的变量无需作为参数传递给类成员函数。这些变量避免了参数传递的开销。消极影响有:一些程序员把代码分到太多的小的类中。这是低

2021-09-06 19:13:34 982

JavaWeb视频教程-day10

JavaWeb视频教程-day10

2024-04-25

JavaWeb视频教程-day09

JavaWeb视频教程_day09

2024-04-25

JavaWeb视频教程-day08

JavaWeb视频教程-day08

2024-04-25

《c++程序设计》谭浩强_答案

《c++程序设计》谭浩强_答案

2014-08-01

编译原理的答案.CHM

编译原理的答案.CHM

2014-07-16

计算机网络第四版(谢希仁)习题详细答案

计算机网络第四版(谢希仁)习题详细答案 doc格式

2014-07-16

计算机网络(第四版)-谢希仁编著.pdf

计算机网络(第四版)-谢希仁编著.pdf

2014-07-16

怎样为arm写c代码.pdf

怎样为arm写c代码.pdf

2013-01-15

RTP协议在嵌入式网络摄像机中的设计及实现.pdf

RTP协议在嵌入式网络摄像机中的设计及实现.pdf 讲述RTP应用结构

2012-10-29

ARM体系结构与编程.pdf

ARM处理器是一种16/32位的高性能、低成本、低功耗的嵌入式RISC微处理器,有ARM公司设计,然后授权给各半导体厂商生产,它目前已经成为应用最为广泛的嵌入式处理器。 本书分14章对ARM处理器的体系结构,指令系统和开发工具作了比较全面的介绍。其中包括ARM体系介绍、ARM程序设计模型、ARM汇编语言程学设计、ARM C/C++语言程序设计、ARM连接器的使用、ARM集成开发环境CodeWarrior IDE的介绍及高性能的调试工具ADW的使用。并在此基础之上介绍一些典型的基于ARM体系的嵌入式应用系统设计时的基本技术。通过阅读本书可以使读者掌握开发基于ARM的应用系统的各方面的知识。 本书既可作为学习ARM技术的培训资料,也可作为嵌入式系统开发人员的参考手册。

2012-10-26

putty通信工具

PuTTY是一个Telnet/SSH/rlogin/纯TCP以及串行阜连线软件。较早的版本仅支援Windows平台,在最近的版本中开始支援各类Unix平台,并打算移植至Mac OS X上。除了官方版本外,有许多非官方的团体或个人将PuTTY移植到其他平台上,像是以Symbian为基础的移动电话。

2012-10-25

Linux下的实时流媒体编程.docx

Linux下的实时流媒体编程。使用jrtplib创建实时流媒体会话。

2012-10-25

高级shell编程.pdf

学习shell编程的经典书籍,对系统管理也有帮助

2012-10-25

BMP转jpeg源码.doc

BMP转jpeg源码.doc linux下需要相关库.

2012-10-25

H264关于RTP协议的实现

H264关于RTP协议的实现

2012-07-20

H.264码流结构解析

H.264码流结构解析

2012-07-19

阿郎MyIPTouch开发手册

阿郎MyIPTouch开发手册 阿尔卡特朗讯 开发手册

2012-06-11

Thinking in C++

全书共分十八章,内容涉及对象的演化、数据抽象、隐藏实现、初始化与清除、函数重载与缺省参数、输入输出流介绍、常量、内联函数、命名控制、引用和拷贝构造函数、运算符重载、动态对象创建、继承和组合、多态和虚函数、模板和包容器类、多重继承、异常处理和运行时类型识别。

2011-03-26

JCREATOR 4.5官方安装包

JCREATOR JCREATOR JCREATOR JCREATOR JCREATOR JCREATOR JCREATOR JCREATOR

2009-09-14

UNIX网络编程卷2

UNIX网络编程卷2:进程间通信PDF UNIX网络编程卷2:进程间通信PDF UNIX网络编程卷2:进程间通信PDF UNIX网络编程卷2:进程间通信PDF UNIX网络编程卷2:进程间通信PDF

2009-08-08

UNIX网络编程卷2(2)进程间通信

UNIX网络编程卷2(2)进程间通信 UNIX网络编程卷2(2)进程间通信 UNIX网络编程卷2(2)进程间通信 UNIX网络编程卷2(2)进程间通信 分两部分上传,共19.1M(完整) 解压后放到一个文件夹内。

2009-08-08

UNIX网络编程卷2(1)

UNIX网络编程卷2(1)进程间通信 UNIX网络编程卷2(1)进程间通信 UNIX网络编程卷2(1)进程间通信 UNIX网络编程卷2(1)进程间通信 分两部分上传,共19.1M(完整) 解压后放到一个文件夹内。

2009-08-08

华清远见Linux驱动开发

华清远见Linux驱动开发华清远见Linux驱动开发华清远见Linux驱动开发华清远见Linux驱动开发华清远见Linux驱动开发

2009-07-25

华清远见linux驱动程序开发

华清远见linux驱动程序开发华清远见linux驱动程序开发华清远见linux驱动程序开发华清远见linux驱动程序开发华清远见linux驱动程序开发

2009-07-25

华清远见linux驱动程序开发

华清远见linux驱动程序开发华清远见linux驱动程序开发华清远见linux驱动程序开发华清远见linux驱动程序开发华清远见linux驱动程序开发华清远见linux驱动程序开发华清远见linux驱动程序开发

2009-07-25

华清远见Linux培训资料集合

华清远见Linux培训资料集合华清远见Linux培训资料集合华清远见Linux培训资料集合华清远见Linux培训资料集合华清远见Linux培训资料集合华清远见Linux培训资料集合

2009-07-25

华清远见Linux培训资料集合

华清远见Linux培训资料集合华清远见Linux培训资料集合华清远见Linux培训资料集合华清远见Linux培训资料集合华清远见Linux培训资料集合华清远见Linux培训资料集合

2009-07-25

华清远见Linux培训资料集合

华清远见Linux培训资料集合华清远见Linux培训资料集合华清远见Linux培训资料集合华清远见Linux培训资料集合华清远见Linux培训资料集合华清远见Linux培训资料集合华清远见Linux培训资料集合

2009-07-25

华清远见Linux培训资料集合

华清远见Linux培训资料集合 华清远见Linux培训资料集合 华清远见Linux培训资料集合 华清远见Linux培训资料集合 华清远见Linux培训资料集合

2009-07-25

华清远见Linux培训资料集合

华清远见Linux培训资料集合 华清远见Linux培训资料集合 华清远见Linux培训资料集合 华清远见Linux培训资料集合 华清远见Linux培训资料集合

2009-07-25

华清远见Linux培训资料集合

华清远见Linux培训资料集合 华清远见Linux培训资料集合 华清远见Linux培训资料集合 华清远见Linux培训资料集合 华清远见Linux培训资料集合 华清远见Linux培训资料集合

2009-07-25

编译原理(陈火旺第三版)练习答案.pdf

编译原理(陈火旺第三版)练习答案.pdf 编译原理(陈火旺第三版)练习答案.pdf 编译原理(陈火旺第三版)练习答案.pdf 编译原理(陈火旺第三版)练习答案.pdf 编译原理(陈火旺第三版)练习答案.pdf 编译原理(陈火旺第三版)练习答案.pdf 编译原理(陈火旺第三版)练习答案.pdf

2009-07-25

2006年网络工程师试题分析

2006年下半年网络工程师试题分析.pdf

2009-07-23

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除