具体描述
本书系统深入地介绍了各种代码优化编程技术。全书分为4章。第1章集中介绍如何确定程序中消耗CPU时钟最多的热点代码的所谓程序剖析技术以及典型部分工具的实用知识。第2,3章分别全面介绍RAM了系统与高速缓存子系统的代码优化知识。第4章主要介绍了机器代码优化技术。各章在讨论基本原理的同时详细给出了代码实例,并对优化性能进行了定量的分析。
该书特别适合于作为应用程序员及系统程序员的学习与开发之用。同时,本书对在硬件方面的专业人员与技术工作者有一定的参考价值。
作者简介
kris kaspersky是黑客破译、反汇编与代码优化技术的专栏作家。他一直致力于研究安全与系统程序设计方面的问题,内容涉及编译器开发、优化技术、安全机制研究、实时操作系统内核的创建以及反病毒程序的设计等多个领域。
正是因为他虽"杂"却"博"、虽"博"却"深",才能用诙谐而轻松的话语,把严密的科技知识在谈笑间透彻地加以剖析,让读者在轻松愉快之中学习和体验科技的奥妙,这是一种特色、一种方式、一种态度,更是一种境界。
目录信息
1.1 剖分的目标与目的
1.1.1 总执行时间
1.1.2 执行时间的类型
1.1. 3 处罚信息
1.1.4 调用次数
1.1.5 覆盖层次
1.2 微剖分的基本问题
1.2.1 流水作业或者吞吐量与等待时间
1.2.2 测不准
1.2.3 硬件优化
1.2.4 低分辨率
1.3 宏剖分的基本问题
1.3.1 运行时间的不一致性
1.3.2 度运行问题
1.3.3 负面效应
1.3.4 单台机器的代码优化问题
1.4 最新剖分软件概述
1.4.1 intelvtune
1.4.2 amdcodeanalyst
.1.4.3 microsoft的profile.exe
1.5 开发自己的剖分软件
1.6 vtune实用剖分知识
1.6.1 第一步:删除prinff函数
1.6.2 第二步:将strlen函数体移出循环
1.6.3 第三步:对齐数据
1.6.4 第四步:删除strlen函数
1.6.5 第五步:删除除法操作
1.6.6 第六步:删除性能监测代码
1.6.7 第七步:函数组合
1.6.8 第八步:减少内存访问操作的次数
1.6.9 第九步:把vtune当做私人教练
1.6.10 第十步:下结论
1.6.11 结果与预测
第2章 ram子系统
2.1 ram概述
2.2 ram的层次结构
2.3 随机存取存储器
2.4 ram的设计与工作原理
2.4.1 内核部分
2.4.2 传统dram(页面模式的dram)
2.4.3 dram的发展
2.4.4 快速页面模式的dram(fpmdram)
2.4.5 存储器时序
2.4.6 扩展数据输出dram(edodram)
2.4.7 突发式edodram(bedodram)
2.4.8 同步dram(sdram)
2.4.9 倍速sdram(ddrsdram)或者sdramⅱ
2.4.10 直接rambusdram(直接rdram)
2.4.11 不同存储器类型的比较
2.5 存储器与处理器之间的交互操作
2.5.1 计算全存取时间
2.6 dram物理地址到逻辑地址的映射
2.7 内存优化操作
2.7.1 建议
2.7.2 展开循环
2.7.3 消除数据相关性
2.7.4 数据并行处理
2.7.5 优化引用数据结构
2.7.6 减小数据结构的尺寸
2.7.7 dram板块上的数据分布策略
2.7.8 规划数据流
2.7.9 按字节、双字与四字进行内存处理
2.7.10 数据对齐
2.7.11 内存访问与计算的组合
2.7.12 读写操作的组合
2.7.13 只在必要时才访问内存
2.7.14 内置c内存处理函数的优化
2.7.15 内存处理函数的优化质量
2.7.16 c字符串库函数的优化
2.7.17 字符串处理函数的质量优化
2.7.18 块处理算法的优化
2.7.19 大型数组排序的优化
2.8 ram测试问题
第3章 高速缓存子系统
3.1 sram的工作原理
3.1.1 历史概况
3.1.2 内核
3.1.3 触发器的设计
3.1.4 逻辑非元件(取反器)的设计
3.1.5 sram阵列的设计
3.1.6 封装接口的设计
3.1.7 读写时序图
3.1.8 静态存储器的类型
3.2 高速缓存的工作原理
3.2.1 起源
3.2.2 高速缓存的目标与任务
3.2.3 高速缓存的组织
3.3 高速缓存与存储器存取的优化
3.3.1 处理数据的尺寸对性能的影响
3.3.2 可执行代码的尺寸对性能的影响
3.3.3 数据对齐效率
3.3.4 数据在高速缓存板块上的分布
3.3.5 使用有限联合数目的高速缓存
3.3.6 维数组的处理
3.3.7 写缓冲机制的详细说明
3.3.8 新一代x86处理器的高速缓存管理
3.3.9 预取机制的实际应用
3.3.10 内存拷贝内幕或者pentiumⅲ与pentium4的新命令
第4章 机器优化
4.1 c/c++编译器的比较分析
4.1.1 常量表达式
4.1.2 代数表达式
4.1.3 算术运算
4.1.4 分支语句
4.1.5 switch运算符
4.1.6 循环
4.1.7 函数调用
4.1.8 变量分布
4.1.9 字符串初始化
4.1.10 死码
4.1.11 常量条件
4.1.12 确定优胜者
4.2 汇编器与编译器的对决
4.2.1 历史回顾--汇编语言使春天永驻
4.2.2 评价机器优化质量的指标
4.2.3 评价机器优化质量的方法
4.2.4 对主要编译器进行比较分析
4.2.5 测试结果的讨论
4.2.6 机器优化质量的示例
4.2.7 用汇编语言创建保护代码
4.2.8 用汇编语言编程是一种创造性活动
4.2.9 结束语
4.2.10 源代码
· · · · · · (收起)
读后感
总的来说,作为拓宽视野,推荐阅读! 该书作者要描述的优化策略看起来是比较简单的,也是很清晰的,站在程序员的角度来看,好多优化点只能作为参考;要工程应用中,更是仅仅作为一种编码习惯和编码考虑。 作为开拓视野,还是值得阅读。涉及硬件寄底层部分的较多,...
看了这本书才发现,自己以前那些什么“一次复制4个字节”之类的技巧只能算小聪明。程序性能瓶颈不是那么简单就能看出来的,而是各种因素的综合:指令流水线、内存地址对齐、操作系统页面大小、Cache是否命中…… 如果你想优化CPU密集的程序,本书一定要看。 也有一些不足之处...
看了这本书才发现,自己以前那些什么“一次复制4个字节”之类的技巧只能算小聪明。程序性能瓶颈不是那么简单就能看出来的,而是各种因素的综合:指令流水线、内存地址对齐、操作系统页面大小、Cache是否命中…… 如果你想优化CPU密集的程序,本书一定要看。 也有一些不足之处...
还能翻译得再晦涩点么?这水平跟google翻译差不多啊! "TLB"译的那是什么啊,感觉译者完全不懂书中的内容似的!!! 抱歉,你的评论太短了 抱歉,你的评论太短了 抱歉,你的评论太短了 抱歉,你的评论太短了 抱歉,你的评论太短了 抱歉,你的评论太短了 抱歉,你的评论太短...
这本书对于搞高性能程序的人是必看的。内存不再是抽象的一个存储单位, 而是像硬盘那样的设备了. 从此你写码的时候 会注意到这条指令是访问内存 很耗时。看了它, 再看glibc的代码, 看你熟悉的memcpy,strcpy, strlen....怎么实现的, 你会发现书的写的内容,glibc库作者在广泛...
用户评价
《代码优化》这本书简直是一本“性能调优圣经”!我是一名资深的后端工程师, selama 几年,我一直在与各种各样的性能问题作斗争,从数据库查询慢到接口响应迟缓,几乎尝遍了各种苦头。这本书的内容就像为我量身定做的一样,它深入浅出地讲解了如何通过分析程序运行时的数据,找出真正的性能瓶颈。书中介绍的各种性能分析工具,比如profiler、tracing工具的使用方法,以及如何解读它们的输出,都让我受益匪浅。我以前也接触过一些性能分析工具,但往往是“知其然不知其所以然”,用起来总是不得要领。而这本书,它不仅教你如何使用工具,更教你如何“读懂”工具的报告,如何从海量的数据中抽丝剥茧,找到问题的根源。特别是关于并发和多线程的优化章节,作者用非常细致的例子,讲解了锁的粒度、线程安全、死锁等问题,以及如何通过异步编程、消息队列等方式来提高系统的吞吐量。这对于我这种需要处理高并发场景的开发者来说,简直是“雪中送炭”。
读完《代码优化》,我最大的感受就是,代码优化不是一蹴而就的,也不是一味追求极限的“炫技”。这本书更像是一本“内功心法”的秘籍,它教你如何从根本上理解程序的运行机制,然后根据不同的场景,做出最恰当的取舍。我以前为了提高效率,经常会用一些“骚操作”,比如把几个函数硬生生合在一起,或者用一些晦涩的语法来减少几行代码。但这本书让我意识到,这种“优化”往往是以牺牲可读性和可维护性为代价的,而且很多时候,这种所谓的“优化”根本达不到预期的效果,甚至还会适得其反。作者强调了“度”的重要性,什么时候应该花时间去优化,什么时候应该保持代码的简洁清晰,这本书记载了非常多富有洞察力的见解。它不是简单地告诉你“怎么做”,而是告诉你“为什么这么做”,让你拥有独立思考和解决性能问题的能力。我现在写代码,会更倾向于先写出清晰易懂的版本,然后再根据实际的性能瓶颈,有针对性地进行优化,而不是一开始就剑走偏锋。
这本《代码优化》真是让我大开眼界!我一直以为优化就是那些花里胡哨的小技巧,什么位运算、循环展开之类的,但这本书完全颠覆了我的认知。它从最基础的计算机体系结构讲起,详细剖析了CPU缓存、指令流水线、内存访问模式对程序性能的影响。我以前写代码,总觉得只要逻辑对了就行,殊不知一个小小的内存访问顺序,或者一个不经意的函数调用,都可能在底层造成巨大的性能瓶颈。书中通过大量的图示和清晰的解释,将这些抽象的概念具象化,让我能够直观地理解为什么某些代码写法的效率会差那么多。尤其是关于缓存未命中(cache miss)的部分,作者用了很多生动的例子,比如排队买东西和在不同商店购物的对比,让我一下子就明白了缓存的重要性。以前觉得缓存是硬件的事情,跟程序员关系不大,现在才意识到,我们写的代码,很大程度上就是在和硬件“沟通”,如何有效地与硬件沟通,直接决定了程序的生死。这本书让我从“写出能跑的代码”升级到了“写出跑得快的代码”,感觉整个人都通透了许多。
我原本以为《代码优化》会是一本充满枯燥技术术语的书,但实际上,这本书的写作风格非常吸引人,读起来一点也不费劲。作者的语言风格非常幽默风趣,时不时还会穿插一些业界经典的代码优化案例,让人在轻松的氛围中掌握复杂的知识。例如,书中讲到如何优化循环时,用了一个“把一堆散沙搬进一个桶里”的比喻,生动形象地说明了缓存局部性的重要性。而且,作者在讲解每个优化技巧时,都会先描述一个实际场景,然后再给出解决方案,这种“问题-解决方案”的模式,让我更容易理解知识的应用。我之前在工作中遇到过一个性能瓶颈,困扰了我很久,看了这本书的相应章节后,我茅塞顿开,用书中学到的方法,很快就解决了这个问题。这种学以致用的感觉,真的非常棒!这本书不仅教会了我如何写出高性能的代码,更让我对代码优化这个领域产生了浓厚的兴趣,甚至开始主动去研究一些更深层次的算法和数据结构。
《代码优化》这本书让我对“代码质量”有了全新的认识。我之前一直认为,代码质量主要体现在代码的可读性、可维护性、注释是否清晰等方面。然而,这本书让我明白,性能本身就是代码质量的一个重要维度。一本运行缓慢、响应迟钝的代码,无论它写得多么优雅,多么易于维护,都无法满足现代软件对效率的要求。作者在书中反复强调“权衡”的重要性,在性能、可读性、开发效率之间找到最佳的平衡点。他并没有鼓励我们一味地追求极致的性能,而是教导我们如何根据实际需求,在不同的场景下做出明智的选择。比如,对于一些非性能敏感的模块,我们完全可以保持代码的简洁性,节省开发时间和维护成本;而对于那些关键的性能热点,则需要投入更多的精力去进行深入的优化。这本书让我意识到,优化不是“锦上添花”,而是“雪中送炭”,它能够直接影响到用户体验和商业价值。我已经迫不及待地想把书中学到的知识应用到我的下一个项目中了。
好久没看书了。。。 前两章不错;第三章太深入底层了,没怎么看懂;第四章应该叫“编译器”优化。
读过一部分
这本书该怎么读??
从原理入手,深入浅出
关于DRAM讲的很详细。就是翻译有点烂