• ベストアンサー

volatile変数とROM領域について

volatile変数というのは「揮発性変数」という意味です。 「電源を切るとデータが消える」要するに「RAM」であると 考えられます。 しかし、実際、「volatile」が使われるのは、もっぱら 組み込み業界であり、EEPROMアドレス領域変数変数につける 指定子だったりします。 この矛盾について説明いただけないでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • Interest
  • ベストアンサー率31% (207/659)
回答No.9

> 「volatile(=揮発性の)」という名前が実際と乖離しており、 > なにか納得のいく説明が無いかと探している次第です。 そういうご質問だったのですね。 電源を切るとデータが消えるからRAMだとか、EEPROMアドレス領域変数変数につける指定子だとか書かれていたので理解されていないものと思いました。 さて、volatile という言葉の意味ですが、Longman Advanced American Dictionary(現代アメリカ英語辞典)によると、「何の前触れもなく突然変わってしまう傾向がある(likely to change suddenly and without much warning)」という説明がありました。ちなみに、液体がガスに変わる「揮発性の」という説明は3番目に出てきました。 「前触れもなく変わる値」と考えると、組み込みの分野で周辺回路のアドレスに対するアクセスは、そのアドレスにある値がプログラムの実行と無関係に変化する可能性がありますから、このvolatileという意味がしっくりきますね。

すると、全ての回答が全文表示されます。

その他の回答 (9)

  • notnot
  • ベストアンサー率47% (4903/10364)
回答No.10

日本語の単語と英語の単語は一対一対応している訳じゃないので、volatileに「揮発性(消えて無くなる)」という日本語を固定的に与えて、volatile変数の意味とイメージが合わないと言っても無意味です。 この場合のvolatileは「勝手にころころ値が変わる」というような意味な分けです。株価などの金融商品の値段の変動のこともvolatileといい、「この銘柄はあの銘柄よりvolatilityが高い」等と言います。株価が消えて無くなる訳じゃなくて価格変動幅が大きいと言うことです。

すると、全ての回答が全文表示されます。
  • eroermine
  • ベストアンサー率18% (83/444)
回答No.8

お使いの英和辞典が悪かったようですね。 volatile の元々の意味は 「変わり易い」 です。 落ち着かない、うかついた。 転じて軽快、軽妙

すると、全ての回答が全文表示されます。
  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.7

>「電源を切るとデータが消える」要するに「RAM」であると考えられます。 「揮発性」の意味を誤解しています。 Cでのvolatileの「揮発性」の意味は「データは、データを読み出した瞬間のみ有効で、読み出したデータは瞬時に消えてしまう」と言う意味です。 「読み出したデータは瞬時に消えてしまう」のですから、同じ変数に対して繰り返し読み込みを行う場合には「最適化をせず、毎回、読み込み動作が必要」と言う事になります。 簡単に言えば「最適化を抑止する修飾子」です。 >組み込み業界であり、EEPROMアドレス領域変数変数につける 組み込み系や、EEPROMアドレス領域へのアクセスでは「勝手に最適化されると動作しなくなる」ので、volatile修飾子が必須になります。 >この矛盾について説明いただけないでしょうか。 前提の >要するに「RAM」であると考えられます。 が間違いですから、何の矛盾もありません。

h_bounter
質問者

補足

回答ありがとうございます。 僕の質問の意図である「volatile(=揮発性の)」という意味と 実際の使われ方の乖離についての疑問に唯一答えていただけ た点を感謝いたします。 ただ、「読み出したデータは瞬時に消えてしまう」のくだりが 気になります。 「読み出したデータ」というのは、「レジスタ上のデータ」 という意味でしょうか。「メモリ上のデータ」と解釈すると 意味がわからなくなります。 このあたりをさらに解説いただけると大変ありがたいのですが…。

すると、全ての回答が全文表示されます。
  • php504
  • ベストアンサー率42% (926/2160)
回答No.6

volatileって「揮発性」という意味だったんですね「きまぐれな」みたいな意味で使ってました。 さっきの回答は無視してください。 EEPROMも内容は書き換えたり消せますので揮発性といえます

すると、全ての回答が全文表示されます。
  • php504
  • ベストアンサー率42% (926/2160)
回答No.5

揮発性変数って何だろうと思って調べましたがJavaのvolatile解説ページにありました。 Cでいうvolatileとはちょっと違うようです。

すると、全ての回答が全文表示されます。
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.4

volatileが必要になるのは、何も組込み業界だけではありません。 マルチスレッドでも必要ですし、シグナルハンドラでも必要になります。setjmp/longjmpを使うときも必要です。 組込みの場合は、マルチタスク、割り込み処理が多用されますし、RAM上の変数だけでなくI/Oの制御でも必要になるので、使用頻度が上がるだけです。 EEPROMに関しても、そのアドレスに対して代入するのとは別の方法で値が変わるためにvolatileを付けるわけであって、揮発性=RAMといった話ではありません。

h_bounter
質問者

お礼

回答ありがとうございます。 volatile変数の効能は僕も理解しているおります。 組み込み以外でもGUIプログラムなどでマルチスレッド を利用するときに利用することも心得ています。 「volatile(=揮発性の)」という名前が実際と乖離しており、 なにか納得のいく説明が無いかと探している次第です。 質問の意図がわかりにくかった点をお詫びいたします。

すると、全ての回答が全文表示されます。
  • Interest
  • ベストアンサー率31% (207/659)
回答No.3

> 「電源を切るとデータが消える」要するに「RAM」であると考えられます。 この認識が違います。volatile は、コンパイラによって勝手に値が最適化されないようにするために使います。例えば、 *p = 1; *p = 0; *p = 1; 上記のようなソースコードがある場合、コンパイラがこれを最適化すると *p= 1; になってしまいます。しかし、組み込みの世界ではメモリ空間上に割り当てられたデバイスにアクセスするために上記のような処理を多用するため、コンパイラに勝手に 1,0,1 を 1 に置き換えられては困ります。

h_bounter
質問者

お礼

回答ありがとうございます。 volatile変数の効能は僕も理解しているのですが、 「volatile(=揮発性の)」という名前が実際と乖離しており、 なにか納得のいく説明が内科という質問をしている次第です。 意図がわかりにくかった点をお詫びいたします。

すると、全ての回答が全文表示されます。
  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.2

「volatile指定子」の理解に誤りがあります。 ↓など参考になると思います。 http://www.kumikomi.net/article/explanation/2003/10kumi/13.html

h_bounter
質問者

お礼

回答ありがとうございます。 volatile変数の効能は僕も理解しているのですが、 「volatile(=揮発性の)」という名前が実際と乖離しており、 なにか納得のいく説明が内科という質問をしている次第です。 意図がわかりにくかった点をお詫びいたします。

すると、全ての回答が全文表示されます。
  • eroermine
  • ベストアンサー率18% (83/444)
回答No.1

そのプログラム(スレッド)以外{が|も}書き換える変数が volatile

h_bounter
質問者

お礼

回答ありがとうございます。 volatile変数の効能は僕も理解しているのですが、 「volatile(=揮発性の)」という名前が実際と乖離しており、 なにか納得のいく説明が内科という質問をしている次第です。 意図がわかりにくかった点をお詫びいたします。

すると、全ての回答が全文表示されます。

関連するQ&A