• ベストアンサー

Cでのregisterについて

お世話になります。whatpyonです。 素朴な疑問です。 Cで、registerを伴ったオブジェクトに対して、&を使えないのはなぜですか? C++では使用可になっているようですが。

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

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

register記憶クラス指定子は、そのオブジェクトへのアクセスを可能な限り高速に行えるようにすることを示唆するためのものです。 実現方法は、必ずしもレジスタへ割付けである必要はありませんが、普通はプロセッサの汎用レジスタを使用します。汎用レジスタは、通常アドレスを持たない(持つものもある)ので、&演算子を使用することができません。 ちなみに、C++のregister記憶クラス指定子は、C言語との互換性のためだけに用意されたもので、auto記憶クラス指定子と同義ですから、&演算子を使うことができます。

whatpyon
質問者

お礼

お返事が遅れて大変申し訳ございませんでした。 参考となる回答をありがとうございました。

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

register を指定すると、なるべくレジスタに変数を割り当てる (なるべくなので、かならず割り当てられるということではありません)ようにコンパイルされます。 レジスタは、一般的なメモリではないので、メモリに割り当てられた変数のようにアドレスを取り出すことができないのです。

whatpyon
質問者

お礼

お返事が遅れて大変申し訳ございませんでした。 参考となる回答をありがとうございました。

関連するQ&A

  • i386は本当に汎用レジスタ?

    素朴な疑問なので、「暇なときに回答ください」にしました WEBページを見ていると、i386アーキテクチャのAX,BX,CX,DX・・・が汎用レジスタであるという記述が目に付きます。 ここで、汎用レジスタを、まったく機能が同じで命令に直行性があるもの、と定義すると、i386のレジスタは汎用レジスタであるといえるのでしょうか? i386のプログラムでアセンブラで書かれたものがあるとして、ソースプログラムのたとえばAXとCXを入れ替えてアセンブルして出来たプログラムはもとのものとまったく同じ動作をするでしょうか? (システムコールの引数引渡しレジスタの役割が決まっているというのは別にして)。 ご先祖様の8086は違ったのは覚えているのですが(たとえばSIとDIの機能が違う)。i386になって、本当に直交した命令体系になったのか疑問に思っています。

  • [Smarty] register_objectでの配列の扱い

    register_objectメソッドでテンプレートファイルに渡した配列にアクセスする方法がわかりません。 //PHPファイル register_object('data', $obj, 'array') //tplファイル 配列arrayの第一データは、{obj->array[0]}です。 //エラー 配列arrayの第一データは、{obj->array.0}です。 //エラー Smartyマニュアルに、register_objectメソッドについて、 『それはとてもセキュアで、 登録されたオブジェクトはいくつかのメソッドやプロパティを制限する事が出来ます。 しかし繰り返しの処理やオブジェクトの配列への割り当て等の事が出来ません。』 とありますが、これはregister_objectメソッドを使ってオブジェクトを渡す場合、配列にはアクセスできないということなのでしょうか? もし、そうであればassignを使うしかないのでしょうか?register_objectで書くほうがスマートなので、可能であればそちらを使いたいと思っています。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 汎用レジスタについて

    組み込み開発初心者です。 C言語で汎用レジスタを直接さわることはできるのでしょうか?

  • レジスターについて質問です。

    レジスターについて質問です。 レジスターには「飲食店向き」「物販店向き」などありますが、違いはなんでしょうか? 小規模の飲食店(40席程度)なら、物販向けを使用できますか? それとも、○○の機能が付いてない、等の制約があるのでしょうか? 宜しくお願いします

  • ハイパースレディングのレジスタについて

    ハイパースレディングのレジスタについて ハイパースレッデイングのCPUで2つのスレッドA,Bを動かすとする。 このときAの実行状態を示す汎用レジスタやプログラムカウンタと     Bの実行状態を示す汎用レジスタやプログラムカウンタの扱いはどうなのでしょうか。 次の2つの方法が考えられる。 (1) レジスタのロード、実行、レジスタのセーブを繰り返す方法。     CPU内に高速なメモリを持ち、実行前にレジスタに値をロードして、命令を実行して、レジスタの値を保存を繰り返して、A,Bのスレッドを実行する方法。 (2) A用のレジスタとB用のレジスタを2組用意して、相互に切り替えながら実行する方法。     Aを実行するときはA用のレジスタを使用して、Bを実行するときはB用のレジスタを使用する方法。 の2つが考えられるが、それとも他の方法があるのでしょうか。 それに関連して、1度に実行する機械語命令の個数はいくつなのでしょうか。 スレッドAの機械語命令を実行して、切り替えてBの機械語命令を実行するときに、 Aの1命令を実行してから、Bの1命令を実行する。1命令毎に切り替えるのでしょうか、 それともAの数個の命令を実行してから、Bの数個の命令を実行するのでしょうか。 このときスレッドを切り替える際に1度に実行する機械語命令の個数はいくつでしょうか。 ご存知の方がおりましたら、教えて下さい。

  • レジスターの売り上げ記録の消去について教えてほしいのですが、レジスター

    レジスターの売り上げ記録の消去について教えてほしいのですが、レジスターをリース契約で使っていましたが、ルース期間終了のため返却しなくてはなりません。しかし、リース会社側から売り上げ等のデータを消去してから、返さないとならないのですが、消去の仕方が分かりません。取り扱い説明書はありますが、データの消去の方法は載っていません。リース会社側にデータの消去を頼むこともできますが、不景気の折、経費節約ため自分でやりたのです。よろしくお願いします。当方、パソコン関係の知識は初心者クラスです。レジスターの機種は、アスター、C-REG21、型式はC21MSです。

  • シフトレジスタ

    JK-FFを使用してカウンタの実験を行いました。そこで課題が出たのですがよかったら教えてください。 1.4ビットのシフトレジスタの動作原理 2.シフトレジスタのコンピュータを構成する周辺LSIのなかに使われている例 よろしくお願いします。

  • C++ ってなんて読む?

    本当に素朴な疑問ですが…… 「C++」ってなんて読むんですか? シープラスプラス? シーダブルプラス? どうでもいいようなことですが、結構気になっているので誰か教えてください。

  • register_globalsについて

    こんにちわ。お世話になってます。 register_globalsについての質問なのですが、現在、PHP3で書かれたソースをPHP4のregister_globalsを使ったものに書き換えています。 そこで、ファイルのアップロードに関するところで、 <FORM ENCTYPE="multipart/form-data" ACTION="ext_kakunin.php3" METHOD="POST"> <TABLE border="0" cellspacing="0" cellpadding="0"> <TR> <TD>CSV</TD> <TD ALIGN=center width=20>:</TD> <TD><INPUT TYPE=FILE SIZE=50 NAME="csv"></TD> </TR> <TR> <TD>&nbsp;</TD><TD>&nbsp;</TD> <TD><FONT size=3color=#FFFFCB>c:\_sa\re\re.csv</FONT></TD> </TR> </form>

    • ベストアンサー
    • PHP
  • アスターのレジスターが壊れました

    今、使用しているアスターのレジスターが壊れました! 古いものなので、とうとうこの日がやって来たって言う感じです! 新しい物を買う事にしましたが 今まで使っているハンドスキャナーはどのメーカーの物にも 取り付くのでしょうか? また取り付いたとしても対応してくれるのでしょうか? 全くの無知なんで 分かる方はお願いします