今すぐストレージクラスについて学んでいますhere。そして彼は、オートストレージクラスとレジスタストレージクラスについて同じことを説明しているようです。彼が2つに分かれているのは、レジスタストレージクラスがCPUレジスタに格納されているということだけです。これらのストレージクラス間に拡散がありますか?レジスタ記憶クラスの使用一部のCコンパイラでは、デフォルトでRegister Keywordが使用されていますか?登録と自動ストレージクラスの登録?
答えて
register int x = 5;
auto int y = 3;
register
ストレージクラスは、オブジェクトが、レジスタに格納されることを意味するものではありません。標準は言う:
ストレージクラス 指定子
register
とオブジェクトの識別子の宣言は、オブジェクトへのアクセスを可能として として高速であることを示唆しています。そのような提案の有効範囲は、実装定義の です。 CPUレジスタにではなくメモリ内のオブジェクトを格納
(引用は、ISO C標準のN1570ドラフト、セクション6.7.1パラグラフ6からある)
はそれを達成するための一つの方法です、唯一のものではありません。
現代のコンパイラ(おそらく、一般的な知恵によると)はおそらく、どの変数を高速でレジスタに格納するかを決めるよりも優れているので、register
キーワードを使用すると、コンパイラの最適化。
register
も、(メモリに格納されていても)オブジェクトのアドレスを取得するのは不正です。
これは基本的には、現代のコンパイラが行う洗練された最適化を行わなかった初期のコンパイラ(1970年代)のホールドオーバーです。このようなコンパイラでは、パフォーマンスを大幅に向上させる可能性があります。
(現代のコンパイラは、変数のアドレスが必要であるか、または十分なレジスタがないために、必要なときにのみ、すべての変数をレジスタに割り当ててメモリに "流し込む" 。)
まずはお会いしましたか?あなたは議会のチャットルームの人ですか?二番目に....ええ、私はどこかで最後のコメントを聞いたことがあります。あなたのanwserにおかげでたくさんありがとう:) – amanuel2
@Dsafds:いいえ、私はアセンブリのチャットルームではない(それが何であるかわからない)。そして、あなたは大歓迎です。 –
簡単な質問Keith、なぜautoキーワードを使用するのでしょうか?それはデフォルトにjsutそれdosent?そして、申し訳ありません私は私たちが会ったと思って、誰かのアバターはあなたと同じか、まあまあ同じように見えます。 – amanuel2
- 1. 自動デバイス登録
- 2. 自動登録スクリプト
- 3. キャッスルウィンザーと自動登録
- 4. 登録後の自動ログイン
- 5. 自動工場登録
- 6. Django登録フォームと登録独自の電子メールフォーム
- 7. 登録ユーザーと未登録のユーザー
- 8. ジャンゴ・登録オーバーライド登録フォーム
- 9. Identityserver4での登録後の自動ログインユーザ
- 10. Facebook登録プラグイン:登録ライフサイクル管理(登録解除)
- 11. Symfony2/SonataUserBundle - 登録後の自動ログイン
- 12. 登録後の自動ログインPHP
- 13. Laravel 5.4 - 登録後の自動ログイン
- 14. 登録時のジャンゴ登録のリダイレクト
- 15. ユーザー用のWordpress REST API登録(登録)
- 16. Rails 3段階の登録で登録
- 17. アズールボットチャンネルチャンネル登録のブランクで登録
- 18. 登録とログインシステム
- 19. JNDIリソースを自動登録する
- 20. Ninject 3.0 MVC kernel.bindエラー自動登録
- 21. 登録プラグイン、登録データにアクセス
- 22. Django登録控除登録フォーム
- 23. データベースに登録する登録フォームPHP
- 24. 登録
- 25. 登録
- 26. イメージを手動で登録する方法(イメージ登録)
- 27. ES6 angularjsコントローラクラスのsetInterval()の登録と登録解除
- 28. イベントバスの登録とアプリケーションクラスの登録解除
- 29. cakephp単純なユーザ登録と認証(登録とログイン)
- 30. ウォッチアンドロイドデバイスの登録
ブロックスコープオブジェクトはデフォルトで 'auto'であるため、指定子は全く役に立たない。 'register'はlobotomizedコンパイラの問題です。 – EOF
そしてなぜLobotomizedコンパイラでのみ重要ですか?それはどういう意味ですか? @EOF – amanuel2
'gcc'、' icc'や 'clang'のような現代的なコンパイラを使用し、最適な最適化設定を有効にすると、コンパイラはアドレスを持たないオブジェクトを割り当てます(または、アドレスは関数をエスケープしません)を「レジスタ」として宣言したかどうかにかかわらず、CPUレジスタに保持されます。 – EOF