C++性能调优(1)

本文探讨了编程中的性能优化关键,包括硬件层次结构、并行处理、系统调用成本、编译器优化以及不同语言的抽象特性。特别强调了Don Knuth的观点:过度优化的危险。通过阿姆达尔定律解释优化策略的选择和效益计算。

1.记住一句话

We should forget about small efficiencies,say about 97 percent of the time: premature optimization is the root of all evil.

----Donald Knuth

2.影响性能的架构因素

硬件:
(1)存储层次体系;
(2)处理器的乱序执行和流水线;
(3)并行与并发.

软件:
(1)系统调用开销;
(2)编译器优化;
(3)语言抽象性.

3.系统调用开销

read
write
open
close
mmap
gettimeofday
...

4.编译优化

现在编译器功能很强大,也会有很多陷阱,之后详细说说.

5.语言抽象性

C语言
Obj obj;
在栈上分配了sizeof(obj)个字节,O(1)的开销.

C++
Obj obj;
(1)在栈上分配了sizeof(obj)个字节,O(1)的开销;
(2)调用Obj构造函数,复杂度未知;
(3)到达下面的}时调用析构函数,复杂度未知.

一般C++标准库中构造函数的都会明确给出,但是有时候三方提供的类也许不会明确给出构造函数的
复杂度.

6.优化领域的阿姆达尔定律

            1
S = ---------------------
                 p
      1 - P  + -------
                 Sp


p  --- 优化部分占程序的比例
Sp --- 对p这一部分提升的效率
S  --- 整个程序所提升的效率的百分比

如:p  = 50%
    Sp = 50%
则:
S = 1/(1-0.5+1) = 20

这个是相当可喜的.

在有限时间下,找准p较大的点进行优化(如果有优化空间的话),一定程序上会取得比较好的效果.

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值