source: public/doc/gnu-c/Optimization-and-Ordering.html@ 02598c2

Last change on this file since 02598c2 was 02598c2, checked in by Mikhail Kirillov <w96k@…>, on Oct 6, 2022 at 12:36:29 PM

Add gnu-c

  • Property mode set to 100644
File size: 4.1 KB
Line 
1<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2<html>
3<!-- Copyright (C) 2022 Richard Stallman and Free Software Foundation, Inc.
4
5(The work of Trevis Rothwell and Nelson Beebe has been assigned or
6licensed to the FSF.)
7
8Permission is granted to copy, distribute and/or modify this document
9under the terms of the GNU Free Documentation License, Version 1.3 or
10any later version published by the Free Software Foundation; with the
11Invariant Sections being "GNU General Public License," with the
12Front-Cover Texts being "A GNU Manual," and with the Back-Cover
13Texts as in (a) below. A copy of the license is included in the
14section entitled "GNU Free Documentation License."
15
16(a) The FSF's Back-Cover Text is: "You have the freedom to copy and
17modify this GNU manual. Buying copies from the FSF supports it in
18developing GNU and promoting software freedom." -->
19<!-- Created by GNU Texinfo 6.7, http://www.gnu.org/software/texinfo/ -->
20<head>
21<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
22<title>Optimization and Ordering (GNU C Language Manual)</title>
23
24<meta name="description" content="Optimization and Ordering (GNU C Language Manual)">
25<meta name="keywords" content="Optimization and Ordering (GNU C Language Manual)">
26<meta name="resource-type" content="document">
27<meta name="distribution" content="global">
28<meta name="Generator" content="makeinfo">
29<link href="index.html" rel="start" title="Top">
30<link href="Symbol-Index.html" rel="index" title="Symbol Index">
31<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
32<link href="Order-of-Execution.html" rel="up" title="Order of Execution">
33<link href="Primitive-Types.html" rel="next" title="Primitive Types">
34<link href="Ordering-of-Operands.html" rel="prev" title="Ordering of Operands">
35<style type="text/css">
36<!--
37a.summary-letter {text-decoration: none}
38blockquote.indentedblock {margin-right: 0em}
39div.display {margin-left: 3.2em}
40div.example {margin-left: 3.2em}
41div.lisp {margin-left: 3.2em}
42kbd {font-style: oblique}
43pre.display {font-family: inherit}
44pre.format {font-family: inherit}
45pre.menu-comment {font-family: serif}
46pre.menu-preformatted {font-family: serif}
47span.nolinebreak {white-space: nowrap}
48span.roman {font-family: initial; font-weight: normal}
49span.sansserif {font-family: sans-serif; font-weight: normal}
50ul.no-bullet {list-style: none}
51-->
52</style>
53
54
55</head>
56
57<body lang="en">
58<span id="Optimization-and-Ordering"></span><div class="header">
59<p>
60Previous: <a href="Ordering-of-Operands.html" accesskey="p" rel="prev">Ordering of Operands</a>, Up: <a href="Order-of-Execution.html" accesskey="u" rel="up">Order of Execution</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Symbol-Index.html" title="Index" rel="index">Index</a>]</p>
61</div>
62<hr>
63<span id="Optimization-and-Ordering-1"></span><h3 class="section">10.6 Optimization and Ordering</h3>
64<span id="index-optimization-and-ordering"></span>
65<span id="index-ordering-and-optimization"></span>
66
67<p>Sequence points limit the compiler&rsquo;s freedom to reorder operations
68arbitrarily, but optimizations can still reorder them if the compiler
69concludes that this won&rsquo;t alter the results. Thus, in this code,
70</p>
71<div class="example">
72<pre class="example">x++;
73y = z;
74x++;
75</pre></div>
76
77<p>there is a sequence point after each statement, so the code is
78supposed to increment <code>x</code> once before the assignment to <code>y</code>
79and once after. However, incrementing <code>x</code> has no effect on
80<code>y</code> or <code>z</code>, and setting <code>y</code> can&rsquo;t affect <code>x</code>, so
81the code could be optimized into this:
82</p>
83<div class="example">
84<pre class="example">y = z;
85x += 2;
86</pre></div>
87
88<p>Normally that has no effect except to make the program faster. But
89there are special situations where it can cause trouble due to things
90that the compiler cannot know about, such as shared memory. To limit
91optimization in those places, use the <code>volatile</code> type qualifier
92(see <a href="volatile.html">volatile</a>).
93</p>
94
95
96
97</body>
98</html>
Note: See TracBrowser for help on using the repository browser.