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






