今すぐストレージクラスについて学んでいます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. Django登録フォームと登録独自の電子メールフォーム
- 5. 登録ユーザーと未登録のユーザー
- 6. Facebook登録プラグイン:登録ライフサイクル管理(登録解除)
- 7. Laravel 5.4 - 登録後の自動ログイン
- 8. Symfony2/SonataUserBundle - 登録後の自動ログイン
- 9. 登録後の自動ログインPHP
- 10. 登録時のジャンゴ登録のリダイレクト
- 11. Rails 3段階の登録で登録
- 12. JNDIリソースを自動登録する
- 13. Ninject 3.0 MVC kernel.bindエラー自動登録
- 14. 登録プラグイン、登録データにアクセス
- 15. データベースに登録する登録フォームPHP
- 16. Django登録控除登録フォーム
- 17. 登録
- 18. イメージを手動で登録する方法(イメージ登録)
- 19. cakephp単純なユーザ登録と認証(登録とログイン)
- 20. ユーザーの登録
- 21. ウォッチアンドロイドデバイスの登録
- 22. カスタムフォームビューヘルパーの登録
- 23. アップルデベロッパープログラムの登録
- 24. アプリケーションの登録
- 25. Facebookの登録
- 26. エンティティマッピングの登録
- 27. セロリクラスベースタスクの登録
- 28. MVC 5登録エリアの登録と完全に信頼
- 29. MVVMLight v4.0.21.25721 SimpleIocの登録抹消と登録が動作しない
- 30. ジャンゴ登録|変更動作
ブロックスコープオブジェクトはデフォルトで 'auto'であるため、指定子は全く役に立たない。 'register'はlobotomizedコンパイラの問題です。 – EOF
そしてなぜLobotomizedコンパイラでのみ重要ですか?それはどういう意味ですか? @EOF – amanuel2
'gcc'、' icc'や 'clang'のような現代的なコンパイラを使用し、最適な最適化設定を有効にすると、コンパイラはアドレスを持たないオブジェクトを割り当てます(または、アドレスは関数をエスケープしません)を「レジスタ」として宣言したかどうかにかかわらず、CPUレジスタに保持されます。 – EOF