Kurt Guntheroth,是一位有超过35年经验的软件开发人员,其中25年的时间被他用来编写大量C++代码。他在Windows、Linux和嵌入式设备上开发。kurt住在华盛顿州西雅图市。
Preface
1. An Overview of Optimization
Optimization Is Part of Software Development
Optimization Is Effective
It's OK to Optimize
A Nanosecond Here, a Nanosecond There
Summary of Strategies for Optimizing C++ Code
Use a Better Compiler, Use Your Compiler Better
Use Better Algorithms
Use Better Libraries
Reduce Memory Allocation and Copying
Remove Computation
Use Better Data Structures
Increase Concurrency
Optimize Memory Management
Summary
2. Computer Behavior Affecting Optimization
Lies C++ Believes About Computers
The Truth About Computers
Memory Is Slow
Memory Is Not Accessed in Bytes
Some Memory Accesses Are Slower than Others
Memory Words Have a Big End and a Little End
Memory Has Finite Capacity
Instruction Execution Is Slow
Making Decisions Is Hard for Computers
There Are Multiple Streams of Program Execution
Calling into the Operating System Is Expensive
C++ Tells Lies Too
All Statements Are Not Equally Expensive
Statements Are Not Executed in Order
Summary
3. Measure Performance
The Optimizing Mindset
Performance Must Be Measured
Optimizers Are Big Game Hunters
The 90/10 Rule
Amdahl's Law
Perform Experiments
Keep a Lab Notebook
Measure Baseline Performance and Set Goals
You Can Improve Only What You Measure
Profile Program Execution
Time Long-Running Code
'~ Little Learning" About Measuring Time
Measuring Time with Computers
Overcoming Measurement Obstacles
Create a Stopwatch Class
Time Hot Functions in a Test Harness
Estimate Code Cost to Find Hot Code
Estimate the Cost of Individual C++ Statements
Estimate the Cost of Loops
Other Ways to Find Hot Spots
Summary
4. Optimize String Use: A Case Study
Why Strings Are a Problem
Strings Are Dynamically Allocated
Strings Are Values
Strings Do a Lot of Copying
First Attempt at Optimizing Strings
Use Mutating String Operations to Eliminate Temporaries
Reduce Reallocation by Reserving Storage
Eliminate Copying of String Arguments
Eliminate Pointer Dereference Using Iterators
Eliminate Copying of Returned String Values
Use Character Arrays Instead of Strings
……
5. Optimize Algorithms
6. Optimize Dynamically Allocated Variables
7. Optimize Hot Statements
8. Use Better Libraries
9. Optimize Searching and Sorting
10. Optimize Data Structures
11. Optimize I/0
12. Optimize Concurrency
13. Optimize Memory Management