ぼく用あれこれまとめ

volatile型修飾子

最終更新:

bokuyo

- view
管理者のみ編集可

volatile修飾子

  • constやmutableと同じ型修飾子。
  • マルチスレッドプログラミングをするなら知っといた方がいいかも。
  • CやJavaでも同様のものがあるらしいけど、ここではC++について。

プログラムの最適化

  • コンパイラはコンパイルの過程でプログラムの最適化を行うの。
  • 最適化では、
    • 「これ意味ないでしょ…」って言うような文を削除しちゃったり…。
    • 「この程度の変数ならメモリじゃなくて、高速にアクセスできるレジスタに変数おいちゃえ」だとか。
  • コンパイラによってどこまで最適化するのかはさまざまだけどたとえばコレ。
int main(){

	while(0){					//←ここ偽だから
		std::cout << "EUREKA" << std::endl;	// ループ内に
	}						// 入らないよね

	return 0;
}
  • コンパイラたんはそういう無意味なソースを省いてくれるの。
int main(){

	return 0;
}
  • だから実際はこんな感じになる。あくまでイメージだけど。これが最適化なの。

volatileって?

  • volatile修飾子をつけた変数がコンパイラによって最適化されないよう防ぎます。 …えっ?どういうこと?
int main(){

	volatile int eureka = 0;
	while(eureka){
		std::cout << "EUREKA" << std::endl;
	}

	std::cout << "unko" << std::endl;

	return 0;
}
  • こうすると、eurekaにたいしてコンパイラたんは最適化をしません。
  • なので、たとえ無意味なwhile文が削除されずにコンパイルされます。
  • それって意味あるの? ⇒マルチスレッドプログラミングでは意味あるよ。あとは組み込みとか??。

どういうときに使うの?

  • 使わないのでわかりません。

参考リンク

記事メニュー
目安箱バナー