私はアセンブリ言語が初めてです。コードセグメントやデータセグメントなどのメモリセグメントを初期化するときはいつでも、OSはそのためにメモリの一部を割り当てます。しかし、私は自分の本が「記憶の一部」を意味することで本当に混乱しています。 RAMのコードセグメントは特定のものですか?アセンブリ言語:異なるセグメント....それらはRAMに格納されていますか?
0
A
答えて
1
はい!通常、すべてのセグメントがRAMにロードされます。効率性とセキュリティ上の理由から、さまざまなセグメントを区別しています。たとえば、テキストは実行可能だが書き込みはできないが、データは書き込み可能だが実行可能ではないため、テキストとデータを区別する。
埋め込みプラットフォームでは、RAMの代わりにEEPROMまたはフラッシュROMに存在するセクションがあるため、貴重なRAMを浪費することはありません。プログラマーにとって、唯一の違いは、特別な準備をしない限り、そのようなセクションに書き込むことができないことです。
2
あなたはコメントで参照の数を持っているが、私はあなたのコアの質問に答える際に考慮すべき異なる状態があることを追加したい:
- あなたのコードをコンパイルしてリンクすると、それは書き込みその結果を実行可能ファイルまたはライブラリとしてディスクに保存します。
- ディスクイメージでは、コンパイラ/リンカがさまざまなセグメントに関する情報をエンコードします。
- 実行可能ファイル/ライブラリがロードされると、OSはRAMに宣言したセグメントを設定し、セグメントが適切な特権で占有するメモリページを(noted by fuzのように)マークします。
- セグメントの内容全体が読み込まれてRAMにロードされるかどうかは、実行しているプラットフォームによって提供される多数の要因と最適化によって決まります。あなたは他の場所でそれを調べることができます...
関連する問題
- 1. UnicodeがC言語で格納されています
- 2. パラメータがレジスタに格納され、x86-64アセンブリのスタックに格納されないのはなぜですか?
- 3. 依存アセンブリのバージョンが参照アセンブリに格納されていますか?
- 4. SQLiteデータベースに格納されたデータ言語を翻訳する
- 5. 別のフォルダに格納されているアセンブリのクラスのマッピング
- 6. さまざまな種類のプロセッサ用にアセンブリ言語がどのように異なっていますか?
- 7. 構造体の宣言されていない配列にデータが格納されています
- 8. MongoDBの中に異なる言語を持つプロパティを格納し、
- 9. RavenDB - エンティティを格納されていたクラスと異なるクラスにロードする
- 10. rvaluesはC++にどこに格納されていますか?
- 11. nunitは最近ロードされたアセンブリをどこに格納しますか
- 12. リスト内に異なるタイプを格納していますか?
- 13. MySql 5.0で異なる言語(中国語、ヒンディー語など)を含む文字列を格納する方法
- 14. CoreData述語最新格納されている日付
- 15. NSMutableDictionariesに格納される数を知らずにNSMutableDictionariesに格納していますか?
- 16. 衛星アセンブリ、ASP.NET言語が変更されない
- 17. JNDIキャッシュには何が格納されていますか?
- 18. lpCmdLineはどのように格納されていますか?
- 19. スレッドのスタックには何が格納されていますか?
- 20. プロセスのレディキューには何が格納されていますか?
- 21. FILESTREAMデータ型は.mdfファイルに格納されていますか?
- 22. スコープはスタックに格納されていますか?
- 23. Scanner.next()のインデックスはどこに格納されていますか
- 24. 識別フィールドはどこに格納されていますか?
- 25. eclipse args []はどこに格納されていますか?
- 26. オブジェクトはスタックに格納されていますか?
- 27. メンバ関数はどこに格納されていますか?
- 28. L1d CPUキャッシュタグはどこに格納されていますか?
- 29. IsPostBackプロパティはどこに格納されていますか? asp.net
- 30. SQL Serverに格納されているprcedure定義がsys_modules.definitionと異なる
あなたはx86について話していますか?はいの場合は、セグメント*レジスタ*またはアセンブラで記述できるセグメント表現について話していますか?残念ながら、「セグメント」はx86の文献ではかなりオーバーロードされています。 –
はい...私はx86を指しています。セグメントレジスタは、メモリセグメントのアドレスを保持する。私の質問は、例えば、データセグメントを初期化するためにアセンブラで命令を書くとき....そのデータセグメントがRAMの内部で作成されたかどうかです。 – Eliza
あなたが 'mov ax、@data/mov ds、ax'のようなことをしたら?いいえ、セグメントはローダによって実行可能ファイルからロードされます。実行しているのは、正しい位置を指すようにレジスタを設定することです。 DOSのようなOSでは、すべてのメモリにアクセスすることができます。セグメントレジスタを適切に設定することで、必要なメモリをすべて "割り当てる"(またはより使いやすくする)ことができます。 –