liveBook · Manning

Performance optimization

As explained in Modern C

Performance optimization is the systematic modification of software or its operating conditions to improve measured execution speed, responsiveness, throughput, or resource efficiency while preserving required behavior.

What must the executable preserve?

Suppose x and y start at 5.0 and 3.0. The program assigns x = (x * 1.5) - y and prints x. The multiplication and subtraction have no separately observable results. If x is never used again, a compiler may replace the computation with output of the fixed value 4.5. If x is used later, its value must remain available. TAKEAWAY: Optimized execution need not follow every written step; it must preserve observable states. section 5.1

C describes execution through an abstract state machine. Its observable states include relevant stored values and output as they change. A compiler can rearrange or remove work only when the executable preserves those states. Type matters: combining two additions can be valid for an unsigned value yet invalid when an intermediate operation could raise an exception and terminate execution. section 5.1 section 5.1.4

   x += 5;
   /* Do something else without x in the meantime. */
   x += 7;

Inspect the two additions with unrelated work between them. Their apparent equivalence to one addition depends on whether an intermediate value is observed and on the type of x. section 5.1.4

Programmer-directed optimization needs equal care. Complicated changes made before there is evidence of a performance problem can damage readability, soundness, and maintainability. Speed is not a reason to accept out-of-bounds array access, uninitialized or expired objects, or integer overflow: the consequences can include crashes, incorrect results, and exposed information. TAKEAWAY: Do not trade safety for performance. section 15.0

Measure before judging a change, but treat timings as evidence with limitations. A timing call consumes time and can alter register handling, scheduling, caches, and compiler optimization opportunities. Repeat experiments and examine the mean and variation rather than trusting one run. If a loop is meant to measure work, first check that the compiler has not removed that work. section 15.3

Listing 15.1. Measuring several code snippets repeatedly
53      timespec_get(&t[0], TIME_UTC);
54      /* Volatile for i ensures that the loop is effected */
55      for (uint64_t volatile i = 0; i < iterations; ++i) {
56        /* do nothing */
57      }
58      timespec_get(&t[1], TIME_UTC);
59      /* s must be volatile to ensure that the loop is effected */ 
60      for (uint64_t i = 0; i < iterations; ++i) {
61        s = i;
62      }
63      timespec_get(&t[2], TIME_UTC);
64      /* Opaque computation ensures that the loop is effected */
65      for (uint64_t i = 1; accu0 < upper; i += 2) {
66        accu0 += i;
67      }
68      timespec_get(&t[3], TIME_UTC);
69      /* A function call can usually not be optimized out. */
70      for (uint64_t i = 0; i < iterations; ++i) {
71        timespec_get(&tdummy, TIME_UTC);
72        accu1 += tdummy.tv_nsec;
73      }
74      timespec_get(&t[4], TIME_UTC);
75      /* A function call can usually not be optimized out, but
76         an inline function can. */
77      for (uint64_t i = 0; i < iterations; ++i) {
78        timespec_get(&tdummy, TIME_UTC);
79        stats_collect1(&sdummy[1], tdummy.tv_nsec);
80      }
81      timespec_get(&t[5], TIME_UTC);
82      for (uint64_t i = 0; i < iterations; ++i) {
83        timespec_get(&tdummy, TIME_UTC);
84        stats_collect2(&sdummy[2], tdummy.tv_nsec);
85      }
86      timespec_get(&t[6], TIME_UTC);
87      for (uint64_t i = 0; i < iterations; ++i) {
88        timespec_get(&tdummy, TIME_UTC);
89        stats_collect3(&sdummy[3], tdummy.tv_nsec);
90      }
91      timespec_get(&t[7], TIME_UTC);


!@%STYLE%@!
{"css":"{\"css\": \"font-weight: bold;\"}","target":"[[{\"line\":0,\"ch\":0},{\"line\":0,\"ch\":2}],[{\"line\":0,\"ch\":8},{\"line\":0,\"ch\":20}],[{\"line\":5,\"ch\":8},{\"line\":5,\"ch\":20}],[{\"line\":10,\"ch\":8},{\"line\":10,\"ch\":20}],[{\"line\":15,\"ch\":8},{\"line\":15,\"ch\":20}],[{\"line\":18,\"ch\":10},{\"line\":18,\"ch\":22}],[{\"line\":21,\"ch\":8},{\"line\":21,\"ch\":20}],[{\"line\":25,\"ch\":10},{\"line\":25,\"ch\":22}],[{\"line\":28,\"ch\":8},{\"line\":28,\"ch\":20}],[{\"line\":30,\"ch\":10},{\"line\":30,\"ch\":22}],[{\"line\":33,\"ch\":8},{\"line\":33,\"ch\":20}],[{\"line\":35,\"ch\":10},{\"line\":35,\"ch\":22}],[{\"line\":38,\"ch\":8},{\"line\":38,\"ch\":20}],[{\"line\":0,\"ch\":28},{\"line\":0,\"ch\":36}],[{\"line\":5,\"ch\":28},{\"line\":5,\"ch\":36}],[{\"line\":10,\"ch\":28},{\"line\":10,\"ch\":36}],[{\"line\":15,\"ch\":28},{\"line\":15,\"ch\":36}],[{\"line\":18,\"ch\":32},{\"line\":18,\"ch\":40}],[{\"line\":21,\"ch\":28},{\"line\":21,\"ch\":36}],[{\"line\":25,\"ch\":32},{\"line\":25,\"ch\":40}],[{\"line\":28,\"ch\":28},{\"line\":28,\"ch\":36}],[{\"line\":30,\"ch\":32},{\"line\":30,\"ch\":40}],[{\"line\":33,\"ch\":28},{\"line\":33,\"ch\":36}],[{\"line\":35,\"ch\":32},{\"line\":35,\"ch\":40}],[{\"line\":38,\"ch\":28},{\"line\":38,\"ch\":36}],[{\"line\":1,\"ch\":0},{\"line\":1,\"ch\":2}],[{\"line\":2,\"ch\":0},{\"line\":2,\"ch\":2}],[{\"line\":1,\"ch\":20},{\"line\":1,\"ch\":23}],[{\"line\":2,\"ch\":8},{\"line\":2,\"ch\":11}],[{\"line\":7,\"ch\":8},{\"line\":7,\"ch\":11}],[{\"line\":12,\"ch\":8},{\"line\":12,\"ch\":11}],[{\"line\":17,\"ch\":8},{\"line\":17,\"ch\":11}],[{\"line\":24,\"ch\":8},{\"line\":24,\"ch\":11}],[{\"line\":29,\"ch\":8},{\"line\":29,\"ch\":11}],[{\"line\":34,\"ch\":8},{\"line\":34,\"ch\":11}],[{\"line\":2,\"ch\":13},{\"line\":2,\"ch\":21}],[{\"line\":7,\"ch\":13},{\"line\":7,\"ch\":21}],[{\"line\":12,\"ch\":13},{\"line\":12,\"ch\":21}],[{\"line\":17,\"ch\":13},{\"line\":17,\"ch\":21}],[{\"line\":24,\"ch\":13},{\"line\":24,\"ch\":21}],[{\"line\":29,\"ch\":13},{\"line\":29,\"ch\":21}],[{\"line\":34,\"ch\":13},{\"line\":34,\"ch\":21}],[{\"line\":2,\"ch\":22},{\"line\":2,\"ch\":30}],[{\"line\":6,\"ch\":21},{\"line\":6,\"ch\":29}],[{\"line\":3,\"ch\":0},{\"line\":3,\"ch\":2}],[{\"line\":4,\"ch\":0},{\"line\":4,\"ch\":2}],[{\"line\":5,\"ch\":0},{\"line\":5,\"ch\":2}],[{\"line\":0,\"ch\":8},{\"line\":0,\"ch\":20}],[{\"line\":5,\"ch\":8},{\"line\":5,\"ch\":20}],[{\"line\":10,\"ch\":8},{\"line\":10,\"ch\":20}],[{\"line\":15,\"ch\":8},{\"line\":15,\"ch\":20}],[{\"line\":18,\"ch\":10},{\"line\":18,\"ch\":22}],[{\"line\":21,\"ch\":8},{\"line\":21,\"ch\":20}],[{\"line\":25,\"ch\":10},{\"line\":25,\"ch\":22}],[{\"line\":28,\"ch\":8},{\"line\":28,\"ch\":20}],[{\"line\":30,\"ch\":10},{\"line\":30,\"ch\":22}],[{\"line\":33,\"ch\":8},{\"line\":33,\"ch\":20}],[{\"line\":35,\"ch\":10},{\"line\":35,\"ch\":22}],[{\"line\":38,\"ch\":8},{\"line\":38,\"ch\":20}],[{\"line\":0,\"ch\":28},{\"line\":0,\"ch\":36}],[{\"line\":5,\"ch\":28},{\"line\":5,\"ch\":36}],[{\"line\":10,\"ch\":28},{\"line\":10,\"ch\":36}],[{\"line\":15,\"ch\":28},{\"line\":15,\"ch\":36}],[{\"line\":18,\"ch\":32},{\"line\":18,\"ch\":40}],[{\"line\":21,\"ch\":28},{\"line\":21,\"ch\":36}],[{\"line\":25,\"ch\":32},{\"line\":25,\"ch\":40}],[{\"line\":28,\"ch\":28},{\"line\":28,\"ch\":36}],[{\"line\":30,\"ch\":32},{\"line\":30,\"ch\":40}],[{\"line\":33,\"ch\":28},{\"line\":33,\"ch\":36}],[{\"line\":35,\"ch\":32},{\"line\":35,\"ch\":40}],[{\"line\":38,\"ch\":28},{\"line\":38,\"ch\":36}],[{\"line\":6,\"ch\":0},{\"line\":6,\"ch\":2}],[{\"line\":7,\"ch\":0},{\"line\":7,\"ch\":2}],[{\"line\":1,\"ch\":20},{\"line\":1,\"ch\":23}],[{\"line\":2,\"ch\":8},{\"line\":2,\"ch\":11}],[{\"line\":7,\"ch\":8},{\"line\":7,\"ch\":11}],[{\"line\":12,\"ch\":8},{\"line\":12,\"ch\":11}],[{\"line\":17,\"ch\":8},{\"line\":17,\"ch\":11}],[{\"line\":24,\"ch\":8},{\"line\":24,\"ch\":11}],[{\"line\":29,\"ch\":8},{\"line\":29,\"ch\":11}],[{\"line\":34,\"ch\":8},{\"line\":34,\"ch\":11}],[{\"line\":2,\"ch\":13},{\"line\":2,\"ch\":21}],[{\"line\":7,\"ch\":13},{\"line\":7,\"ch\":21}],[{\"line\":12,\"ch\":13},{\"line\":12,\"ch\":21}],[{\"line\":17,\"ch\":13},{\"line\":17,\"ch\":21}],[{\"line\":24,\"ch\":13},{\"line\":24,\"ch\":21}],[{\"line\":29,\"ch\":13},{\"line\":29,\"ch\":21}],[{\"line\":34,\"ch\":13},{\"line\":34,\"ch\":21}],[{\"line\":8,\"ch\":0},{\"line\":8,\"ch\":2}],[{\"line\":9,\"ch\":0},{\"line\":9,\"ch\":2}],[{\"line\":10,\"ch\":0},{\"line\":10,\"ch\":2}],[{\"line\":0,\"ch\":8},{\"line\":0,\"ch\":20}],[{\"line\":5,\"ch\":8},{\"line\":5,\"ch\":20}],[{\"line\":10,\"ch\":8},{\"line\":10,\"ch\":20}],[{\"line\":15,\"ch\":8},{\"line\":15,\"ch\":20}],[{\"line\":18,\"ch\":10},{\"line\":18,\"ch\":22}],[{\"line\":21,\"ch\":8},{\"line\":21,\"ch\":20}],[{\"line\":25,\"ch\":10},{\"line\":25,\"ch\":22}],[{\"line\":28,\"ch\":8},{\"line\":28,\"ch\":20}],[{\"line\":30,\"ch\":10},{\"line\":30,\"ch\":22}],[{\"line\":33,\"ch\":8},{\"line\":33,\"ch\":20}],[{\"line\":35,\"ch\":10},{\"line\":35,\"ch\":22}],[{\"line\":38,\"ch\":8},{\"line\":38,\"ch\":20}],[{\"line\":0,\"ch\":28},{\"line\":0,\"ch\":36}],[{\"line\":5,\"ch\":28},{\"line\":5,\"ch\":36}],[{\"line\":10,\"ch\":28},{\"line\":10,\"ch\":36}],[{\"line\":15,\"ch\":28},{\"line\":15,\"ch\":36}],[{\"line\":18,\"ch\":32},{\"line\":18,\"ch\":40}],[{\"line\":21,\"ch\":28},{\"line\":21,\"ch\":36}],[{\"line\":25,\"ch\":32},{\"line\":25,\"ch\":40}],[{\"line\":28,\"ch\":28},{\"line\":28,\"ch\":36}],[{\"line\":30,\"ch\":32},{\"line\":30,\"ch\":40}],[{\"line\":33,\"ch\":28},{\"line\":33,\"ch\":36}],[{\"line\":35,\"ch\":32},{\"line\":35,\"ch\":40}],[{\"line\":38,\"ch\":28},{\"line\":38,\"ch\":36}],[{\"line\":2,\"ch\":17},{\"line\":2,\"ch\":19}],[{\"line\":7,\"ch\":17},{\"line\":7,\"ch\":19}],[{\"line\":11,\"ch\":0},{\"line\":11,\"ch\":2}],[{\"line\":12,\"ch\":17},{\"line\":12,\"ch\":19}],[{\"line\":17,\"ch\":17},{\"line\":17,\"ch\":19}],[{\"line\":24,\"ch\":17},{\"line\":24,\"ch\":19}],[{\"line\":29,\"ch\":17},{\"line\":29,\"ch\":19}],[{\"line\":34,\"ch\":17},{\"line\":34,\"ch\":19}],[{\"line\":12,\"ch\":0},{\"line\":12,\"ch\":2}],[{\"line\":1,\"ch\":20},{\"line\":1,\"ch\":23}],[{\"line\":2,\"ch\":8},{\"line\":2,\"ch\":11}],[{\"line\":7,\"ch\":8},{\"line\":7,\"ch\":11}],[{\"line\":12,\"ch\":8},{\"line\":12,\"ch\":11}],[{\"line\":17,\"ch\":8},{\"line\":17,\"ch\":11}],[{\"line\":24,\"ch\":8},{\"line\":24,\"ch\":11}],[{\"line\":29,\"ch\":8},{\"line\":29,\"ch\":11}],[{\"line\":34,\"ch\":8},{\"line\":34,\"ch\":11}],[{\"line\":2,\"ch\":13},{\"line\":2,\"ch\":21}],[{\"line\":7,\"ch\":13},{\"line\":7,\"ch\":21}],[{\"line\":12,\"ch\":13},{\"line\":12,\"ch\":21}],[{\"line\":17,\"ch\":13},{\"line\":17,\"ch\":21}],[{\"line\":24,\"ch\":13},{\"line\":24,\"ch\":21}],[{\"line\":29,\"ch\":13},{\"line\":29,\"ch\":21}],[{\"line\":34,\"ch\":13},{\"line\":34,\"ch\":21}],[{\"line\":13,\"ch\":0},{\"line\":13,\"ch\":2}],[{\"line\":14,\"ch\":0},{\"line\":14,\"ch\":2}],[{\"line\":15,\"ch\":0},{\"line\":15,\"ch\":2}],[{\"line\":0,\"ch\":8},{\"line\":0,\"ch\":20}],[{\"line\":5,\"ch\":8},{\"line\":5,\"ch\":20}],[{\"line\":10,\"ch\":8},{\"line\":10,\"ch\":20}],[{\"line\":15,\"ch\":8},{\"line\":15,\"ch\":20}],[{\"line\":18,\"ch\":10},{\"line\":18,\"ch\":22}],[{\"line\":21,\"ch\":8},{\"line\":21,\"ch\":20}],[{\"line\":25,\"ch\":10},{\"line\":25,\"ch\":22}],[{\"line\":28,\"ch\":8},{\"line\":28,\"ch\":20}],[{\"line\":30,\"ch\":10},{\"line\":30,\"ch\":22}],[{\"line\":33,\"ch\":8},{\"line\":33,\"ch\":20}],[{\"line\":35,\"ch\":10},{\"line\":35,\"ch\":22}],[{\"line\":38,\"ch\":8},{\"line\":38,\"ch\":20}],[{\"line\":0,\"ch\":28},{\"line\":0,\"ch\":36}],[{\"line\":5,\"ch\":28},{\"line\":5,\"ch\":36}],[{\"line\":10,\"ch\":28},{\"line\":10,\"ch\":36}],[{\"line\":15,\"ch\":28},{\"line\":15,\"ch\":36}],[{\"line\":18,\"ch\":32},{\"line\":18,\"ch\":40}],[{\"line\":21,\"ch\":28},{\"line\":21,\"ch\":36}],[{\"line\":25,\"ch\":32},{\"line\":25,\"ch\":40}],[{\"line\":28,\"ch\":28},{\"line\":28,\"ch\":36}],[{\"line\":30,\"ch\":32},{\"line\":30,\"ch\":40}],[{\"line\":33,\"ch\":28},{\"line\":33,\"ch\":36}],[{\"line\":35,\"ch\":32},{\"line\":35,\"ch\":40}],[{\"line\":38,\"ch\":28},{\"line\":38,\"ch\":36}],[{\"line\":16,\"ch\":0},{\"line\":16,\"ch\":2}],[{\"line\":17,\"ch\":0},{\"line\":17,\"ch\":2}],[{\"line\":1,\"ch\":20},{\"line\":1,\"ch\":23}],[{\"line\":2,\"ch\":8},{\"line\":2,\"ch\":11}],[{\"line\":7,\"ch\":8},{\"line\":7,\"ch\":11}],[{\"line\":12,\"ch\":8},{\"line\":12,\"ch\":11}],[{\"line\":17,\"ch\":8},{\"line\":17,\"ch\":11}],[{\"line\":24,\"ch\":8},{\"line\":24,\"ch\":11}],[{\"line\":29,\"ch\":8},{\"line\":29,\"ch\":11}],[{\"line\":34,\"ch\":8},{\"line\":34,\"ch\":11}],[{\"line\":2,\"ch\":13},{\"line\":2,\"ch\":21}],[{\"line\":7,\"ch\":13},{\"line\":7,\"ch\":21}],[{\"line\":12,\"ch\":13},{\"line\":12,\"ch\":21}],[{\"line\":17,\"ch\":13},{\"line\":17,\"ch\":21}],[{\"line\":24,\"ch\":13},{\"line\":24,\"ch\":21}],[{\"line\":29,\"ch\":13},{\"line\":29,\"ch\":21}],[{\"line\":34,\"ch\":13},{\"line\":34,\"ch\":21}],[{\"line\":18,\"ch\":0},{\"line\":18,\"ch\":2}],[{\"line\":0,\"ch\":8},{\"line\":0,\"ch\":20}],[{\"line\":5,\"ch\":8},{\"line\":5,\"ch\":20}],[{\"line\":10,\"ch\":8},{\"line\":10,\"ch\":20}],[{\"line\":15,\"ch\":8},{\"line\":15,\"ch\":20}],[{\"line\":18,\"ch\":10},{\"line\":18,\"ch\":22}],[{\"line\":21,\"ch\":8},{\"line\":21,\"ch\":20}],[{\"line\":25,\"ch\":10},{\"line\":25,\"ch\":22}],[{\"line\":28,\"ch\":8},{\"line\":28,\"ch\":20}],[{\"line\":30,\"ch\":10},{\"line\":30,\"ch\":22}],[{\"line\":33,\"ch\":8},{\"line\":33,\"ch\":20}],[{\"line\":35,\"ch\":10},{\"line\":35,\"ch\":22}],[{\"line\":38,\"ch\":8},{\"line\":38,\"ch\":20}],[{\"line\":0,\"ch\":28},{\"line\":0,\"ch\":36}],[{\"line\":5,\"ch\":28},{\"line\":5,\"ch\":36}],[{\"line\":10,\"ch\":28},{\"line\":10,\"ch\":36}],[{\"line\":15,\"ch\":28},{\"line\":15,\"ch\":36}],[{\"line\":18,\"ch\":32},{\"line\":18,\"ch\":40}],[{\"line\":21,\"ch\":28},{\"line\":21,\"ch\":36}],[{\"line\":25,\"ch\":32},{\"line\":25,\"ch\":40}],[{\"line\":28,\"ch\":28},{\"line\":28,\"ch\":36}],[{\"line\":30,\"ch\":32},{\"line\":30,\"ch\":40}],[{\"line\":33,\"ch\":28},{\"line\":33,\"ch\":36}],[{\"line\":35,\"ch\":32},{\"line\":35,\"ch\":40}],[{\"line\":38,\"ch\":28},{\"line\":38,\"ch\":36}],[{\"line\":19,\"ch\":0},{\"line\":19,\"ch\":2}],[{\"line\":19,\"ch\":26},{\"line\":19,\"ch\":33}],[{\"line\":26,\"ch\":44},{\"line\":26,\"ch\":51}],[{\"line\":31,\"ch\":44},{\"line\":31,\"ch\":51}],[{\"line\":36,\"ch\":44},{\"line\":36,\"ch\":51}],[{\"line\":20,\"ch\":0},{\"line\":20,\"ch\":2}],[{\"line\":21,\"ch\":0},{\"line\":21,\"ch\":2}],[{\"line\":0,\"ch\":8},{\"line\":0,\"ch\":20}],[{\"line\":5,\"ch\":8},{\"line\":5,\"ch\":20}],[{\"line\":10,\"ch\":8},{\"line\":10,\"ch\":20}],[{\"line\":15,\"ch\":8},{\"line\":15,\"ch\":20}],[{\"line\":18,\"ch\":10},{\"line\":18,\"ch\":22}],[{\"line\":21,\"ch\":8},{\"line\":21,\"ch\":20}],[{\"line\":25,\"ch\":10},{\"line\":25,\"ch\":22}],[{\"line\":28,\"ch\":8},{\"line\":28,\"ch\":20}],[{\"line\":30,\"ch\":10},{\"line\":30,\"ch\":22}],[{\"line\":33,\"ch\":8},{\"line\":33,\"ch\":20}],[{\"line\":35,\"ch\":10},{\"line\":35,\"ch\":22}],[{\"line\":38,\"ch\":8},{\"line\":38,\"ch\":20}],[{\"line\":0,\"ch\":28},{\"line\":0,\"ch\":36}],[{\"line\":5,\"ch\":28},{\"line\":5,\"ch\":36}],[{\"line\":10,\"ch\":28},{\"line\":10,\"ch\":36}],[{\"line\":15,\"ch\":28},{\"line\":15,\"ch\":36}],[{\"line\":18,\"ch\":32},{\"line\":18,\"ch\":40}],[{\"line\":21,\"ch\":28},{\"line\":21,\"ch\":36}],[{\"line\":25,\"ch\":32},{\"line\":25,\"ch\":40}],[{\"line\":28,\"ch\":28},{\"line\":28,\"ch\":36}],[{\"line\":30,\"ch\":32},{\"line\":30,\"ch\":40}],[{\"line\":33,\"ch\":28},{\"line\":33,\"ch\":36}],[{\"line\":35,\"ch\":32},{\"line\":35,\"ch\":40}],[{\"line\":38,\"ch\":28},{\"line\":38,\"ch\":36}],[{\"line\":22,\"ch\":0},{\"line\":22,\"ch\":2}],[{\"line\":23,\"ch\":0},{\"line\":23,\"ch\":2}],[{\"line\":24,\"ch\":0},{\"line\":24,\"ch\":2}],[{\"line\":1,\"ch\":20},{\"line\":1,\"ch\":23}],[{\"line\":2,\"ch\":8},{\"line\":2,\"ch\":11}],[{\"line\":7,\"ch\":8},{\"line\":7,\"ch\":11}],[{\"line\":12,\"ch\":8},{\"line\":12,\"ch\":11}],[{\"line\":17,\"ch\":8},{\"line\":17,\"ch\":11}],[{\"line\":24,\"ch\":8},{\"line\":24,\"ch\":11}],[{\"line\":29,\"ch\":8},{\"line\":29,\"ch\":11}],[{\"line\":34,\"ch\":8},{\"line\":34,\"ch\":11}],[{\"line\":2,\"ch\":13},{\"line\":2,\"ch\":21}],[{\"line\":7,\"ch\":13},{\"line\":7,\"ch\":21}],[{\"line\":12,\"ch\":13},{\"line\":12,\"ch\":21}],[{\"line\":17,\"ch\":13},{\"line\":17,\"ch\":21}],[{\"line\":24,\"ch\":13},{\"line\":24,\"ch\":21}],[{\"line\":29,\"ch\":13},{\"line\":29,\"ch\":21}],[{\"line\":34,\"ch\":13},{\"line\":34,\"ch\":21}],[{\"line\":25,\"ch\":0},{\"line\":25,\"ch\":2}],[{\"line\":0,\"ch\":8},{\"line\":0,\"ch\":20}],[{\"line\":5,\"ch\":8},{\"line\":5,\"ch\":20}],[{\"line\":10,\"ch\":8},{\"line\":10,\"ch\":20}],[{\"line\":15,\"ch\":8},{\"line\":15,\"ch\":20}],[{\"line\":18,\"ch\":10},{\"line\":18,\"ch\":22}],[{\"line\":21,\"ch\":8},{\"line\":21,\"ch\":20}],[{\"line\":25,\"ch\":10},{\"line\":25,\"ch\":22}],[{\"line\":28,\"ch\":8},{\"line\":28,\"ch\":20}],[{\"line\":30,\"ch\":10},{\"line\":30,\"ch\":22}],[{\"line\":33,\"ch\":8},{\"line\":33,\"ch\":20}],[{\"line\":35,\"ch\":10},{\"line\":35,\"ch\":22}],[{\"line\":38,\"ch\":8},{\"line\":38,\"ch\":20}],[{\"line\":0,\"ch\":28},{\"line\":0,\"ch\":36}],[{\"line\":5,\"ch\":28},{\"line\":5,\"ch\":36}],[{\"line\":10,\"ch\":28},{\"line\":10,\"ch\":36}],[{\"line\":15,\"ch\":28},{\"line\":15,\"ch\":36}],[{\"line\":18,\"ch\":32},{\"line\":18,\"ch\":40}],[{\"line\":21,\"ch\":28},{\"line\":21,\"ch\":36}],[{\"line\":25,\"ch\":32},{\"line\":25,\"ch\":40}],[{\"line\":28,\"ch\":28},{\"line\":28,\"ch\":36}],[{\"line\":30,\"ch\":32},{\"line\":30,\"ch\":40}],[{\"line\":33,\"ch\":28},{\"line\":33,\"ch\":36}],[{\"line\":35,\"ch\":32},{\"line\":35,\"ch\":40}],[{\"line\":38,\"ch\":28},{\"line\":38,\"ch\":36}],[{\"line\":26,\"ch\":0},{\"line\":26,\"ch\":2}],[{\"line\":19,\"ch\":26},{\"line\":19,\"ch\":33}],[{\"line\":26,\"ch\":44},{\"line\":26,\"ch\":51}],[{\"line\":31,\"ch\":44},{\"line\":31,\"ch\":51}],[{\"line\":36,\"ch\":44},{\"line\":36,\"ch\":51}],[{\"line\":27,\"ch\":0},{\"line\":27,\"ch\":2}],[{\"line\":28,\"ch\":0},{\"line\":28,\"ch\":2}],[{\"line\":0,\"ch\":8},{\"line\":0,\"ch\":20}],[{\"line\":5,\"ch\":8},{\"line\":5,\"ch\":20}],[{\"line\":10,\"ch\":8},{\"line\":10,\"ch\":20}],[{\"line\":15,\"ch\":8},{\"line\":15,\"ch\":20}],[{\"line\":18,\"ch\":10},{\"line\":18,\"ch\":22}],[{\"line\":21,\"ch\":8},{\"line\":21,\"ch\":20}],[{\"line\":25,\"ch\":10},{\"line\":25,\"ch\":22}],[{\"line\":28,\"ch\":8},{\"line\":28,\"ch\":20}],[{\"line\":30,\"ch\":10},{\"line\":30,\"ch\":22}],[{\"line\":33,\"ch\":8},{\"line\":33,\"ch\":20}],[{\"line\":35,\"ch\":10},{\"line\":35,\"ch\":22}],[{\"line\":38,\"ch\":8},{\"line\":38,\"ch\":20}],[{\"line\":0,\"ch\":28},{\"line\":0,\"ch\":36}],[{\"line\":5,\"ch\":28},{\"line\":5,\"ch\":36}],[{\"line\":10,\"ch\":28},{\"line\":10,\"ch\":36}],[{\"line\":15,\"ch\":28},{\"line\":15,\"ch\":36}],[{\"line\":18,\"ch\":32},{\"line\":18,\"ch\":40}],[{\"line\":21,\"ch\":28},{\"line\":21,\"ch\":36}],[{\"line\":25,\"ch\":32},{\"line\":25,\"ch\":40}],[{\"line\":28,\"ch\":28},{\"line\":28,\"ch\":36}],[{\"line\":30,\"ch\":32},{\"line\":30,\"ch\":40}],[{\"line\":33,\"ch\":28},{\"line\":33,\"ch\":36}],[{\"line\":35,\"ch\":32},{\"line\":35,\"ch\":40}],[{\"line\":38,\"ch\":28},{\"line\":38,\"ch\":36}],[{\"line\":29,\"ch\":0},{\"line\":29,\"ch\":2}],[{\"line\":1,\"ch\":20},{\"line\":1,\"ch\":23}],[{\"line\":2,\"ch\":8},{\"line\":2,\"ch\":11}],[{\"line\":7,\"ch\":8},{\"line\":7,\"ch\":11}],[{\"line\":12,\"ch\":8},{\"line\":12,\"ch\":11}],[{\"line\":17,\"ch\":8},{\"line\":17,\"ch\":11}],[{\"line\":24,\"ch\":8},{\"line\":24,\"ch\":11}],[{\"line\":29,\"ch\":8},{\"line\":29,\"ch\":11}],[{\"line\":34,\"ch\":8},{\"line\":34,\"ch\":11}],[{\"line\":2,\"ch\":13},{\"line\":2,\"ch\":21}],[{\"line\":7,\"ch\":13},{\"line\":7,\"ch\":21}],[{\"line\":12,\"ch\":13},{\"line\":12,\"ch\":21}],[{\"line\":17,\"ch\":13},{\"line\":17,\"ch\":21}],[{\"line\":24,\"ch\":13},{\"line\":24,\"ch\":21}],[{\"line\":29,\"ch\":13},{\"line\":29,\"ch\":21}],[{\"line\":34,\"ch\":13},{\"line\":34,\"ch\":21}],[{\"line\":30,\"ch\":0},{\"line\":30,\"ch\":2}],[{\"line\":0,\"ch\":8},{\"line\":0,\"ch\":20}],[{\"line\":5,\"ch\":8},{\"line\":5,\"ch\":20}],[{\"line\":10,\"ch\":8},{\"line\":10,\"ch\":20}],[{\"line\":15,\"ch\":8},{\"line\":15,\"ch\":20}],[{\"line\":18,\"ch\":10},{\"line\":18,\"ch\":22}],[{\"line\":21,\"ch\":8},{\"line\":21,\"ch\":20}],[{\"line\":25,\"ch\":10},{\"line\":25,\"ch\":22}],[{\"line\":28,\"ch\":8},{\"line\":28,\"ch\":20}],[{\"line\":30,\"ch\":10},{\"line\":30,\"ch\":22}],[{\"line\":33,\"ch\":8},{\"line\":33,\"ch\":20}],[{\"line\":35,\"ch\":10},{\"line\":35,\"ch\":22}],[{\"line\":38,\"ch\":8},{\"line\":38,\"ch\":20}],[{\"line\":0,\"ch\":28},{\"line\":0,\"ch\":36}],[{\"line\":5,\"ch\":28},{\"line\":5,\"ch\":36}],[{\"line\":10,\"ch\":28},{\"line\":10,\"ch\":36}],[{\"line\":15,\"ch\":28},{\"line\":15,\"ch\":36}],[{\"line\":18,\"ch\":32},{\"line\":18,\"ch\":40}],[{\"line\":21,\"ch\":28},{\"line\":21,\"ch\":36}],[{\"line\":25,\"ch\":32},{\"line\":25,\"ch\":40}],[{\"line\":28,\"ch\":28},{\"line\":28,\"ch\":36}],[{\"line\":30,\"ch\":32},{\"line\":30,\"ch\":40}],[{\"line\":33,\"ch\":28},{\"line\":33,\"ch\":36}],[{\"line\":35,\"ch\":32},{\"line\":35,\"ch\":40}],[{\"line\":38,\"ch\":28},{\"line\":38,\"ch\":36}],[{\"line\":31,\"ch\":0},{\"line\":31,\"ch\":2}],[{\"line\":19,\"ch\":26},{\"line\":19,\"ch\":33}],[{\"line\":26,\"ch\":44},{\"line\":26,\"ch\":51}],[{\"line\":31,\"ch\":44},{\"line\":31,\"ch\":51}],[{\"line\":36,\"ch\":44},{\"line\":36,\"ch\":51}],[{\"line\":32,\"ch\":0},{\"line\":32,\"ch\":2}],[{\"line\":33,\"ch\":0},{\"line\":33,\"ch\":2}],[{\"line\":0,\"ch\":8},{\"line\":0,\"ch\":20}],[{\"line\":5,\"ch\":8},{\"line\":5,\"ch\":20}],[{\"line\":10,\"ch\":8},{\"line\":10,\"ch\":20}],[{\"line\":15,\"ch\":8},{\"line\":15,\"ch\":20}],[{\"line\":18,\"ch\":10},{\"line\":18,\"ch\":22}],[{\"line\":21,\"ch\":8},{\"line\":21,\"ch\":20}],[{\"line\":25,\"ch\":10},{\"line\":25,\"ch\":22}],[{\"line\":28,\"ch\":8},{\"line\":28,\"ch\":20}],[{\"line\":30,\"ch\":10},{\"line\":30,\"ch\":22}],[{\"line\":33,\"ch\":8},{\"line\":33,\"ch\":20}],[{\"line\":35,\"ch\":10},{\"line\":35,\"ch\":22}],[{\"line\":38,\"ch\":8},{\"line\":38,\"ch\":20}],[{\"line\":0,\"ch\":28},{\"line\":0,\"ch\":36}],[{\"line\":5,\"ch\":28},{\"line\":5,\"ch\":36}],[{\"line\":10,\"ch\":28},{\"line\":10,\"ch\":36}],[{\"line\":15,\"ch\":28},{\"line\":15,\"ch\":36}],[{\"line\":18,\"ch\":32},{\"line\":18,\"ch\":40}],[{\"line\":21,\"ch\":28},{\"line\":21,\"ch\":36}],[{\"line\":25,\"ch\":32},{\"line\":25,\"ch\":40}],[{\"line\":28,\"ch\":28},{\"line\":28,\"ch\":36}],[{\"line\":30,\"ch\":32},{\"line\":30,\"ch\":40}],[{\"line\":33,\"ch\":28},{\"line\":33,\"ch\":36}],[{\"line\":35,\"ch\":32},{\"line\":35,\"ch\":40}],[{\"line\":38,\"ch\":28},{\"line\":38,\"ch\":36}],[{\"line\":34,\"ch\":0},{\"line\":34,\"ch\":2}],[{\"line\":1,\"ch\":20},{\"line\":1,\"ch\":23}],[{\"line\":2,\"ch\":8},{\"line\":2,\"ch\":11}],[{\"line\":7,\"ch\":8},{\"line\":7,\"ch\":11}],[{\"line\":12,\"ch\":8},{\"line\":12,\"ch\":11}],[{\"line\":17,\"ch\":8},{\"line\":17,\"ch\":11}],[{\"line\":24,\"ch\":8},{\"line\":24,\"ch\":11}],[{\"line\":29,\"ch\":8},{\"line\":29,\"ch\":11}],[{\"line\":34,\"ch\":8},{\"line\":34,\"ch\":11}],[{\"line\":2,\"ch\":13},{\"line\":2,\"ch\":21}],[{\"line\":7,\"ch\":13},{\"line\":7,\"ch\":21}],[{\"line\":12,\"ch\":13},{\"line\":12,\"ch\":21}],[{\"line\":17,\"ch\":13},{\"line\":17,\"ch\":21}],[{\"line\":24,\"ch\":13},{\"line\":24,\"ch\":21}],[{\"line\":29,\"ch\":13},{\"line\":29,\"ch\":21}],[{\"line\":34,\"ch\":13},{\"line\":34,\"ch\":21}],[{\"line\":35,\"ch\":0},{\"line\":35,\"ch\":2}],[{\"line\":0,\"ch\":8},{\"line\":0,\"ch\":20}],[{\"line\":5,\"ch\":8},{\"line\":5,\"ch\":20}],[{\"line\":10,\"ch\":8},{\"line\":10,\"ch\":20}],[{\"line\":15,\"ch\":8},{\"line\":15,\"ch\":20}],[{\"line\":18,\"ch\":10},{\"line\":18,\"ch\":22}],[{\"line\":21,\"ch\":8},{\"line\":21,\"ch\":20}],[{\"line\":25,\"ch\":10},{\"line\":25,\"ch\":22}],[{\"line\":28,\"ch\":8},{\"line\":28,\"ch\":20}],[{\"line\":30,\"ch\":10},{\"line\":30,\"ch\":22}],[{\"line\":33,\"ch\":8},{\"line\":33,\"ch\":20}],[{\"line\":35,\"ch\":10},{\"line\":35,\"ch\":22}],[{\"line\":38,\"ch\":8},{\"line\":38,\"ch\":20}],[{\"line\":0,\"ch\":28},{\"line\":0,\"ch\":36}],[{\"line\":5,\"ch\":28},{\"line\":5,\"ch\":36}],[{\"line\":10,\"ch\":28},{\"line\":10,\"ch\":36}],[{\"line\":15,\"ch\":28},{\"line\":15,\"ch\":36}],[{\"line\":18,\"ch\":32},{\"line\":18,\"ch\":40}],[{\"line\":21,\"ch\":28},{\"line\":21,\"ch\":36}],[{\"line\":25,\"ch\":32},{\"line\":25,\"ch\":40}],[{\"line\":28,\"ch\":28},{\"line\":28,\"ch\":36}],[{\"line\":30,\"ch\":32},{\"line\":30,\"ch\":40}],[{\"line\":33,\"ch\":28},{\"line\":33,\"ch\":36}],[{\"line\":35,\"ch\":32},{\"line\":35,\"ch\":40}],[{\"line\":38,\"ch\":28},{\"line\":38,\"ch\":36}],[{\"line\":36,\"ch\":0},{\"line\":36,\"ch\":2}],[{\"line\":19,\"ch\":26},{\"line\":19,\"ch\":33}],[{\"line\":26,\"ch\":44},{\"line\":26,\"ch\":51}],[{\"line\":31,\"ch\":44},{\"line\":31,\"ch\":51}],[{\"line\":36,\"ch\":44},{\"line\":36,\"ch\":51}],[{\"line\":37,\"ch\":0},{\"line\":37,\"ch\":2}],[{\"line\":38,\"ch\":0},{\"line\":38,\"ch\":2}],[{\"line\":0,\"ch\":8},{\"line\":0,\"ch\":20}],[{\"line\":5,\"ch\":8},{\"line\":5,\"ch\":20}],[{\"line\":10,\"ch\":8},{\"line\":10,\"ch\":20}],[{\"line\":15,\"ch\":8},{\"line\":15,\"ch\":20}],[{\"line\":18,\"ch\":10},{\"line\":18,\"ch\":22}],[{\"line\":21,\"ch\":8},{\"line\":21,\"ch\":20}],[{\"line\":25,\"ch\":10},{\"line\":25,\"ch\":22}],[{\"line\":28,\"ch\":8},{\"line\":28,\"ch\":20}],[{\"line\":30,\"ch\":10},{\"line\":30,\"ch\":22}],[{\"line\":33,\"ch\":8},{\"line\":33,\"ch\":20}],[{\"line\":35,\"ch\":10},{\"line\":35,\"ch\":22}],[{\"line\":38,\"ch\":8},{\"line\":38,\"ch\":20}],[{\"line\":0,\"ch\":28},{\"line\":0,\"ch\":36}],[{\"line\":5,\"ch\":28},{\"line\":5,\"ch\":36}],[{\"line\":10,\"ch\":28},{\"line\":10,\"ch\":36}],[{\"line\":15,\"ch\":28},{\"line\":15,\"ch\":36}],[{\"line\":18,\"ch\":32},{\"line\":18,\"ch\":40}],[{\"line\":21,\"ch\":28},{\"line\":21,\"ch\":36}],[{\"line\":25,\"ch\":32},{\"line\":25,\"ch\":40}],[{\"line\":28,\"ch\":28},{\"line\":28,\"ch\":36}],[{\"line\":30,\"ch\":32},{\"line\":30,\"ch\":40}],[{\"line\":33,\"ch\":28},{\"line\":33,\"ch\":36}],[{\"line\":35,\"ch\":32},{\"line\":35,\"ch\":40}],[{\"line\":38,\"ch\":28},{\"line\":38,\"ch\":36}]]"}
!@%STYLE%@!

Compare timed loops whose work is retained through volatile access, an opaque computation, or a function call. The listing makes the question of what is actually being timed concrete. section 15.3

How Modern C covers it

How deep it goes
Works through legal and type-dependent transformations, then develops repeated timing and inspection; does not promise that a particular rewrite will be faster.
Examples
Uses constant arithmetic, separated additions, timed loops, a timing histogram, and compiler-generated assembly.
What it assumes
Assumes growing comfort with C coding while explaining observable state and the abstract state machine from basic values and types.
What you can do after
Practice/perform it by checking observable behavior and safety, then repeating timings and inspecting whether the intended work survives compilation.
How it connects
Connects the abstract state machine and observable states to types, overflow, safety, instrumentation, and timing statistics.

Also explained in

Compare how 7 books explain performance optimization →

Related concepts

This explainer was generated by Manning's knowledge graph from the text of Modern C. The section links point to the parts of the book it draws on.