liveBook · Manning

Measurement

As explained in Modern C

Measurement is the systematic assessment of a property, behavior, or outcome that produces an observed value, score, or judgment.

A timed C loop can appear fast for the wrong reason: the compiler may remove work whose result cannot be observed. Before comparing runtimes, make sure the operations you intend to measure actually execute. Then time repeated runs and report their variation, not just one elapsed value. 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%@!

The loops use different means of keeping work observable: a volatile counter, a volatile store, an accumulation, and a call to timespec_get. Timestamp calls separate the timed snippets. section 15.3

TAKEAWAY: Performance assessment of code requires measurement; complexity assessment of algorithms requires proof. Choose an appropriate algorithm before tuning its implementation, but do not infer the speed of compiled code from an argument about complexity alone. section 15.3

A practical timing comparison has several parts:

  • Record timestamps around code that the compiler cannot simply discard. Remember that even an apparently empty loop can acquire work when its counter is volatile. section 15.3
  • Repeat measurements, collect elapsed-time statistics, and report both a mean and relative variation. The example calculates differences with timespec_diff, collects them with stats_collect2, and prints a mean and relative standard deviation. section 15.3
  • Compare differences against the observed variation. A measured 6% difference between an opaque addition and a volatile store is marked inconclusive, while several larger differences are marked conclusive. section 15.4

TAKEAWAY: All measurements introduce bias. A timespec_get call consumes time and can change compiler optimization, operating-system scheduling, or cache behavior. Instrumentation therefore measures an instrumented execution; it is not a free window onto an otherwise untouched run. Inspecting generated code alongside timings helps establish what was executed: the GCC and Clang examples implement the volatile-counter loop differently. section 15.3

Use the results to assess performance claims, not to justify sacrificing correctness. A claimed improvement needs thorough measurements and statistics. section 15.4

How Modern C covers it

How deep it goes
Works through instrumented loops, repeated timing statistics, and compiler inspection; leaves the broader science of measurement outside scope.
Examples
Compares timed C loops, generated GCC and Clang code, reported means and deviations, and a table of conclusive differences.
What it assumes
Assumes familiarity with C loops and functions; identifies volatile counters and timestamp calls in the worked examples.
What you can do after
Evaluate/understand performance claims using repeated timings, statistics, and inspection of executed code while accounting for measurement bias.
How it connects
Connects algorithmic complexity, compiler optimization, volatile, operating-system scheduling, caches, and statistical variation to performance assessment.

Also explained in

Compare how 4 books explain measurement →

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.