Register your product to gain access to bonus material or receive a coupon.
Introduction.
I. EVERYTHING BUT THE CODE.
1. Optimizing: What Is It All About?Performance.
What Is Performance? Why Optimize? Performance of Physical Devices. Performance of System Resources. Performance of Subsystems. Performance of Communications. Application Look and Feel. When Do Performance Problems Arise? Flexibility Versus Performance.
Footprint.
What Is Footprint? Why Is Monitoring Footprint Important? How to Measure Footprint Size. When Do Footprint Problems Arise?
Summary.
2. Creating a New System.System Requirements.
Setting Performance Targets. Stability and Availability. Concurrency. Choosing the Target System.
System Design Issues.
Application Framework (Static). Object Lifetime (Dynamic).
The Development Process.
Prototyping. Scheduling Performance and Footprint Measurements.
Data Processing Methods.
Processing Immediately. Processing on Request. Periodic Processing. Batch Processing.
Summary.
3. Modifying an Existing System.Identifying What to Modify.
Looking at the Symptoms.
Beginning Your Optimization.
Finding Candidate Areas for Optimization. Analyzing the Candidate Areas and Selecting Targets for Optimization. Performing the Design and Implementation of the (Selected). Optimizations.
Analyzing Target Areas.
Design Flaws, Faulty Algorithms, and Bugs. Looking at the Data Model.
Performing the Optimizations.
Replacing Existing Functionality. Tuning Existing Software.
Summary.
II. GETTING OUR HANDS DIRTY.
4. Tools and Languages.Tools You Cannot Do Without.
The Compiler. The Preprocessor. The Assembler. The Linker. The Make Utility. The Debugger. Effects When Debugging. The Profiler. The Runtime Checker. The Static Source Code Analyzer. Your Own Test Program.
Optimizing with Help from the Compiler.
Optimizing with Compiler Optimization Options. A Closer Look at What Actually Happens.
The Language for the Job.
Assembly, C, C++, or…? Mixing Languages.
Summary.
5. Measuring Time and Complexity.The Marriage of Theory and Practice.
Algorithm Complexity (the O Notation). The Timing Function.
System Influences.
Cache Misses. Page Faults. Other OS Overhead. Techniques for Minimizing System Influences.
Summary.
6. The Standard C/C++ Variables.Variable Base Types.
Size and Range of Variables. Performance of Variables. Scope of Variables and Objects.
Grouping Base Types.
Structs. Bit Fields. Unions.
Summary.
7. Basic Programming Statements.Selectors.
if..else Statement. Jump Tables. switch Statement. Comparing Selector Performance.
Loops.
Aborting Loops. Skipping Parts of the Loop.
Summary.
8. Functions.Invoking Functions.
Macros. Inline Functions. Iteration Versus Recursion.
Passing Data to Functions.
Pass by Reference Versus Pass by Value. Global Data.
Early Returns. Functions as Class Methods.
Inheritance. Virtual Functions. Templates.
Summary.
9. Efficient Memory Management.Memory Fragmentation.
What Exactly Is Memory Fragmentation? When Is Memory Fragmentation Likely to Occur? Characteristics of Memory Fragmentation.
Memory Management.
Suballocators. Memory Management Theory.
Resizable Data Structures.
Enlarging Arrays. Shrinking Arrays.
Summary.
10. Blocks of Data.Comparing Blocks of Data.
Standard Pattern Matching. Faster Pattern Matching. Simple Pattern Search. Faster Pattern Search. Case-Insensitive Fast String Search.
The Theory of Sorting Data.
Algorithm Issues.
Sorting Techniques.
Insertion Sort. Bubble Sort. Shell Sort. Heap Sort. Pros and Cons of Heap Sort. Quick Sort. Radix Sort. Merge Sort.
Summary.
11. Storage Structures.Arrays.
Inserting. Deleting. Searching. Traversing. Sorting.
Linked Lists.
Inserting. Deleting. Searching. Traversing. Sorting.
Hash Tables.
Inserting. Deleting. Searching. Traversing. Sorting. Hash Functions.
Binary Trees.
Inserting. Deleting. Searching. Sorting. Traversing Fundamentals. Traversal Continued.
Red/Black Trees.
Inserting Theory. Inserting Practice. Deleting. Searching. Sorting. Traversing.
Summary.
Arrays. Lists. Hash Tables. Binary Trees. Red/Black Trees.
12. Optimizing IO.Efficient Screen Output.
Using printf(). Using puts() and putchar(). Using cout. Test Results.
Efficient Binary File IO.
Using FILE Functions. Using Streams. Test Results.
Efficient Text File IO.
Why Text Files? Searching Text Files. Searching Using Wildcards.
Summary.
13. Optimizing Your Code Further.Arithmetic Operations.
Using Bit Operators for Arithmetic Operations. Identifying Static Parts in Calculations and Conversions. Optimizing Mathematical Equations.
Operating System-Based Optimizations.
Multitasking. Callback Functions.
Summary.
III. TIPS AND PITFALLS.
14. Tips.Tricks.
Recognizing Code: C or C++. Endianness. Variable Number of Arguments. Avoiding Unnecessary Checks. Avoiding Unnecessary Bugs. Avoiding Unnecessarily Large Data Structures. Using ANSI Predefined Macros. Static Information Generated by the Compiler. Stack Versus Heap.
Preparing for the Future.
Compatibility. Portability.
15. Pitfalls 351.Algorithmic Pitfalls.
Arrays and Inheritance. Wrap Around of Loop Counters. Scope of Loop Counters. Expression Evaluation and Operator Overloading. Memory Copy of Objects.
Typos that Compile.
Difference Between Mathematical Statements and C/C++ Statements. Inadvertently Creating Labels. Inadvertently Creating Comments. Inadvertently Causing Loop Problems. Mixing Statically Bound Methods with Dynamically Bound Methods.
Other Pitfalls.
Pitfalls with Character Arrays. Using Hardware Addresses (Memory-Mapped IO).
Index.