목차
1. 소개
1.1 왜 C가 효율적인가 = 19
1.2 왜 C++이 효율적인가 = 21
1.3 효율성 증진을 위한 방법론 = 22
1.4 처음부터 제대로 = 23
1.5 성능 향상과 문제점 = 24
1.6 C의 최적화 = 25
1.7 프로그래머의 효율성 = 26
1.8 컴파일 시간을 줄이자! = 27
1.9 참고서적 = 28
2. Measurement and estimation
2.1 Profiler for C = 33
2.2 Turbo Profiler Utility = 34
2.3 Timing Code = 36
2.4 Instrumenting Program = 38
2.5 Benchmark Timing Programs = 43
2.6 어셈블리 소스로 확인해 보자 = 50
2.7 코드의 크기와 static space를 측정한다면 = 52
2.8 Heap의 사용량 = 54
2.9 Stack의 사용량은 얼마일까 = 56
2.10 시간과 공간 요구량을 예측할 수 있는가 = 57
2.11 요약 = 58
연습문제 = 59
3. 알고리즘 개선
3.1 Augmenting Data Structures = 63
3.2 미리 계산된 결과를 저장하는 방법 : Table Lookup = 65
3.3 Lazy Evaluation = 66
3.4 컴파일 시간의 초기화와 계산 결과의 이용 = 67
3.5 혼잡도(complexity)를 줄여보자 : Simple Solution = 69
3.6 점증 알고리즘(Incremental Algorithm) = 71
3.7 간단한 테스트로 복잡한 테스트를 피하자 = 73
3.8 Sentinels = 76
3.9 재귀호출을 줄여보자 = 77
3.10 정수 연산(Integer Arithmetic) = 85
3.11 근사치(Approximations) = 85
3.12 입력을 위해 무한히 기다리지 말자! = 86
3.13 디스크의 입출력을 줄여보자 = 87
3.14 요약 = 88
연습문제 = 89
4. 코드변형
4.1 반복문 형태 변환(Loop transformations) = 93
4.2 흐름 제어에서의 변형 = 104
4.3 표현식(Expressions) = 109
4.4 형 변환의 회피 = 125
4.5 컴파일 시간의 초기화 = 128
4.6 함수(Functions) = 131
4.7 명령어 라인 매개변수 = 136
4.8 IBM PC 메모리 모델 = 137
4.9 마치면서 = 142
연습문제 = 143
5. C++ Techniques
5.1 C++과 C = 147
5.2 Passing Parameters by Reference = 148
5.3 Inline function = 150
5.4 Friend Function = 153
5.5 가상 함수 - good or bad? = 156
5.6 Overloading new and delete = 161
5.7 Specializing Function과 Default Arguments = 165
5.8 Specializing inherited member functions = 167
5.9 베이스 객체와 멤버 객체의 초기화 = 168
5.10 임시 객체(temporary object)를 피하자! = 170
5.11 선언은 처음 사용되는 곳에서 가장 가까운 곳에... = 172
5.12 (iostream.h)와 (stdio.h) = 174
5.13 레퍼런스 카운터(Reference counters) = 175
5.14 하나의 객체 클래스(One-instance classes) = 187
5.15 요약 = 188
5.16 참고서적 = 189
연습문제 = 191
6. ANSI C 표준 라이브러리
6.1 (ctype.h)의 문자 함수 = 196
6.2 (string.h)의 문자열 함수 = 198
6.3 (stdio.h)의 입출력 함수 = 201
6.4 (math.h)에 있는 일반 수학 함수 = 203
6.5 qsort와 bsearch의 대체 = 207
6.6 임의의 수 발생 함수 : rand = 208
6.7 assertion을 제거하자! = 208
6.8 나만의 malloc 함수를 만들자! = 209
6.9 string.h에서의 메모리 블록 함수 = 212
6.10 요약 = 213
연습문제 = 215
7. Space-efficiency
7.1 실행 파일의 크기를 줄이자! = 220
7.2 데이터의 크기를 줄이기 위한 일반적인 기법 = 223
7.3 static storage의 요구량을 줄여보자! = 229
7.4 stack의 사용을 줄이자! = 230
7.5 Heap의 사용을 줄이자! = 232
7.6 요약 = 232
연습문제 = 233
8. Abstract data types in C++
8.1 추상 자료형이란 = 237
8.2 stack ADT = 238
8.3 stack ADT의 배열로의 구현 = 240
8.4 stack ADT의 Single Linked List로의 구현 = 241
8.5 stack ADT의 혼성 구현 = 244
8.6 탐색 - Symbol Table ADT = 246
8.7 자료구조의 선택 = 247
8.8 심벌 테이블의 정렬되지 않은 배열로의 구현 = 250
8.9 심벌 테이블의 정렬된 배열로의 구현 = 253
8.10 심벌 테이블의 정렬되지 않은 연결 리스트로의 구현 = 258
8.11 심벌 테이블의 정렬된 연결 리스트로의 구현 = 263
8.12 심벌 테이블의 이분트리로의 구현 = 267
8.13 꼬리표 포인터를 가진 이분트리 = 275
8.14 심벌 테이블의 해싱으로의 구현 = 277
8.15 Static Data의 검색 - 완전 해싱(perfect hashing) = 284
8.16 배열의 정렬(Sorting arrays) = 293
8.17 요약 = 297
8.18 참고서적 = 298
연습문제 = 299
9. 예제 프로그램
9.1 이길 수 없는 Tic-Tac-Toe 플레이어 = 303
9.2 게임 트리와 Minimax 알고리즘 = 304
9.3 Minimax 알고리즘으로 간단한 구현을 = 307
9.4 Tic-Tac-Toe 프로그램의 성능 개선 = 317
9.5 Alpha-Beta Pruning = 319
9.6 계산 결과를 저장하자! = 321
9.7 Prime Number 잘 만들기 = 325
9.8 Prime Number를 배열에 미리 넣어서 계산하면 어떨까? = 328
9.9 Prime Number를 구하는 프로그램이 소비하는 시간은? = 330
9.10 참고서적 = 332
연습문제 = 333
10. Ideas for Compiler Optimization
10.1 잘 알려진 최적화 기법 = 338
10.2 원형과 매개변수의 확장 = 342
10.3 프로토타입과 함수 호출 = 343
10.4 부동 소수점 연산에서의 단배정도 = 344
10.5 식에서의 char와 short = 345
10.6 표준 라이브러리 함수의 매크로 처리 = 346
10.7 표준 라이브러리 함수 = 348
10.8 volatile 한정자(限定字) = 352
10.9 const 한정자(限定字) = 353
10.10 register 한정자(限定字) = 355
10.11 레지스터 할당과 작은 객체 = 355
10.12 C++ inline 한정자(限定字) = 356
10.13 가상 함수 호출 = 357
10.14 문자열 상수의 병합으로 사용 공간을 줄이자! = 357
10.15 요약 = 358
10.16 참고서적 = 359
연습문제 = 361