resisterとは?

[戻る]
SONATA 2003/10/13(月) 20:33:33
C++のプログラムのなかに
register unsigned int *p_num;
という宣言が書かれたプログラムがありました
このresisterというのはどういうことなのでしょうか?
その名の通りレジスタに確保されるからアクセスがメモリに確保するより高速だとかそういうこ
とでしょうか?
はじめてみた宣言方法なのでよくわかりません

渋木宏明(ひどり) [E-Mail] [HomePage] 2003/10/13(月) 22:06:22
>その名の通りレジスタに確保されるからアクセスがメモリに確保するより高速だとかそ
ういうこ
>とでしょうか?

意味としてはそうですが、必ずそうなる保証はありません。

多用すればむしろ、コンパイラの最適化を阻害する可能性すらあります。

組み込み用途など、特殊な場合を除いて、現代ではあまり有効な指定ではないでしょ
う。

RiSK 2003/10/13(月) 22:09:05
VC6/MSDN(2001/10)

私も初めて見るキーワードです。
#VC以前にC/C++の勉強が足りないみたい。


調べた結果は以下のとおり

>register キーワードは、状況が許す限り、変数をマシンのレジスタに格納するように指定し
ます。
# MSDN(2001/10)
#キーワード「register」で簡単に見つかります。

あと、↓の過去ログにズバリの情報があります。
http://www.mtakahashi.com/
#キーワード「register」で簡単に見つかります。



スピードに関しては
「二重のforループの中で適当な変数をインクリメントする」コードを書いて
実験してみましたが、スピードが変わった印象はありませんでした。
(ループのカウンタにregisterをつける/つけない)
#コンパイラが勝手に最適化しているのかもしれません。

#SONATAさんがregisterをつける/つけないで実験をすればいいと思います。

YuO [E-Mail] 2003/10/14(火) 00:02:00
> スピードに関しては
> 「二重のforループの中で適当な変数をインクリメントする」コードを書いて
> 実験してみましたが、スピードが変わった印象はありませんでした。
> (ループのカウンタにregisterをつける/つけない)
> #コンパイラが勝手に最適化しているのかもしれません。

VC++の32bitコンパイラは,
registerが付いていることを気にせずコンパイルするようです。
#もちろん,単項&演算子を適用するとエラー(C2103)が起きますが。
http://msdn.microsoft.com/library/en-us/vclang/html/_CLANG_Registers.3a_.
Availability_of_Registers.asp

古いスレッドには追加発言できません。