回答編集履歴

2

グローバル変数なので代入は消せない

2016/08/01 05:29

投稿

maisumakun
maisumakun

スコア145183

test CHANGED
@@ -6,4 +6,4 @@
6
6
 
7
7
 
8
8
 
9
- 一方で、リリースビルドにすると、`dt1`、`dt2`、`dt3`は代入も**後で全く使いません**ので、最適化で変数ご消してしまうことがあります。この場合、`volatile`なしでは`vdata`への参照も消してしまうのに対して、`volatile`ありの時は`vdata`の読み取りをソースコード上と同じく、3回行います。
9
+ 一方で、リリースビルドにすると、`dt1`、`dt2`、`dt3`への代入「同じ」`vdata`の値を代入するので、一度読み取っレジスタに置いておいて、2回め以降はそれを使い回すという最適化が可能ります。`volatile`ありの時はそうもいかないので、`vdata`の読み取りをソースコード上と同じく、3回行います。

1

最適化レベルの注記

2016/08/01 05:29

投稿

maisumakun
maisumakun

スコア145183

test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- デバッグモードでは、デバッグの都合上、「C言語での行」と対応付けをするように機械語を生成しますので、最適化は基本的に行われません。
5
+ デバッグモードでは、デバッグの都合上、「C言語での行」と対応付けをするように機械語を生成しますので、行を超えるような最適化は基本的に行われません。
6
6
 
7
7
 
8
8