resisterとは? – プログラミング – Home

通知
すべてクリア

resisterとは?


SONATA
 SONATA
(@SONATA)
ゲスト
結合: 22年前
投稿: 1
Topic starter  

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


引用解決済
トピックタグ
渋木宏明(ひどり)
 渋木宏明(ひどり)
(@渋木宏明(ひどり))
ゲスト
結合: 22年前
投稿: 196
 

>その名の通りレジスタに確保されるからアクセスがメモリに確保するより高速だとかそ
ういうこ
>とでしょうか?

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

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

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


返信引用
RiSK
 RiSK
(@RiSK)
ゲスト
結合: 23年前
投稿: 13
 

VC6/MSDN(2001/10)

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

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

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

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

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

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


返信引用
YuO
 YuO
(@YuO)
ゲスト
結合: 22年前
投稿: 320
 

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

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました