問題タブ [memory-address]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
memory-management - 論理アドレスと物理アドレスの違いは?
私はオペレーティングシステムの概念を読んでいて、第8章にいます!しかし、私はいくつかの説明、または私の理解が正しいという安心感を使うことができました。
論理アドレス:本によると、論理アドレスはCPUによって生成されます。これは正確にはどういう意味ですか?(実行生成アドレスシステムでは..)コードがプログラム用にコンパイルされるとき、プログラムはコードがメモリのどこにロードされるかを知らないと思います。コンパイラが行うのは、プログラムレイアウトの一般的なスケッチと画像のレイアウト方法を設定することだけですが、実際のアドレスは割り当てられません。プログラムが実行されると、CPUはコンパイラが作成したこのレイアウトイメージを取得し、コードから生成されたアドレスにいくつかのアドレス(論理アドレス)を渡します。
物理アドレス:物理アドレスは、CPUが論理アドレスのセット(ベースアドレスとオフセットで構成される)を生成するまで生成されません。論理アドレスはMMUまたは別のデバイスを通過し、ラインのどこかで論理アドレスが物理RAMアドレスにマップされます。
では、実際の違いは何ですか?私は1つの利点を見ることができます。論理アドレスを使用すると、アプリケーションの自由度が高まります。物理アドレスがハードコーディングされている場合、プログラムの成功は、物理コンピュータマシン、使用可能なRAMアドレスなどに大きく依存します。
物理アドレスに変換された論理アドレスの使用は、1対1ではなく2つのステップを課すのではないのでしょうか?
では、生成後の論理アドレスはどこにありますか?それらは、CPUがプロセスを処理している間、CPUのレジスターに存在する可能性がありますが、前後で、どこに行きますか?これは実装に依存することを理解しています。TLBなどのCPUの特殊レジスタスペースまたはバッファに格納されている可能性があると思いますが、正しいですか?そうでない場合、テーブルは実際のRAM自体に存在する可能性があり、CPUはRAM内のテーブルのベースアドレスへのポインタ/アドレスのみを保持します。
RAMにアドレスを保持することは、論理メモリアドレスの目的とは逆効果のようです。私は自分の理解が間違っているとしか思えません。
c - メイン関数が常に同じアドレスにロードされるのに対し、変数はほとんどの場合異なるアドレスを持つのはどうしてですか?
私は今日この小さなプログラムを書きました、そして私はその結果に驚かされました。これがプログラムです
私のマシンでは、メイン関数は常にアドレス「0x80483d4」にロードされ、変数のアドレスは変化し続けます。これはどのように発生しますか?私は、仮想化スキームの一部として、OSが命令のアドレスを再配置し続けるオペレーティングシステムを読みました。では、なぜこのプログラムを実行するたびに、メインが同じアドレスにロードされるのですか?
よろしくお願いします。
variables - gdbで特定の変数のアドレスを取得するにはどうすればよいですか?
コマンドラインであるgdbの特定の変数のアドレスを取得するにはどうすればよいですか。
編集 :
コンストラクターでは機能しません。
c - Cポインタ-異なるアドレス
Cポインターについて学習しようとしていますが、何かを理解できません...次のコード:
なぜアドレスが違うのですか?最初のprintf
(メイン)出力は2つのアドレスです。もう一方printf
(foo)は異なるアドレスを出力します。foo(&演算子)にアドレスを渡します。
assembly - アセンブリで「DS:[40207A]」とはどういう意味ですか?
どういうDS:
意味ですか?
memory - メモリアドレスのビット
イミュニティデバッガーを使用して Windows XP 32 ビットでデバッグしているときに、スタックに次のように表示されます。
私の理解では、すべてのアドレス位置には 8 ビットが含まれています。
これは正しいです?
ruby - Rubyのオブジェクトアドレス
短いバージョン:クラス のデフォルトのメソッドは、オブジェクトのアドレスを表示します。*独自のカスタムメソッドでinspect
これを行うにはどうすればよいですか?inspect
*(明確にするために、通常から取得する8桁の16進数が必要ですinspect
。実際のメモリアドレスは気にしません。メモリアドレスのように見えるので、単にメモリアドレスと呼んでいます。Rubyはメモリセーフ。)
ロングバージョン: 2つのクラスがThing
ありThingList
ます。 は、 Thingsを保持するために特別に設計されThingList
たのサブクラスです。Array
Thingsの性質とプログラムでの使用方法により、Thingsには、を保持する@container
を指すインスタンス変数があります。ThingList
Thing
2つのThingがまったく同じデータを持つ可能性があります。したがって、アプリケーションをデバッグするとき、2つのThingを確実に区別できる唯一の方法はinspect
、アドレスを表示するを使用することです。ただし、私がinspect
aを実行するThing
と、出力のページごとにページが取得されます。これinspect
は、再帰的に検査するため@container
、リスト内のすべてのThingも検査されるためです。
必要なのは、その出力の最初の部分だけです。inspect
これを表示するだけのカスタムメソッドを作成するにはどうすればよいThing
ですか?
編集:to_s
私はデフォルトがまさにこれ を行うことに気づきました。to_s
オブジェクトに関する人間が読める形式の詳細を提供するカスタムがあるため、これは以前は気づいていませんでした。
to_s
を使用できず、カスタムを作成する必要があると想定しますinspect
。
c++ - c ++:文字列定数へのアドレス
オブジェクトのアドレスをg++の文字列定数として取得できますか?例:
の場合&x == 1234
、コードが必要"1234"
です。
編集:
文字列定数とは、コンパイル時またはリンク時にその定数文字列が必要であることを意味します。次のようなインラインアセンブリコードに埋め込む必要があります。
プリプロセッサマクロを使ってマングルされた名前を作成する方法がわからないので、この質問をしました。
ソリューションは移植可能である必要はなく、g++で十分です。
ただし、アドレス自体はコンパイル時またはリンク時に認識されます。これは、アセンブリ出力を調べて、マングルされた名前をインラインアセンブリ命令に挿入するために機能するためです。
c# - .netオブジェクトのアドレス(ポインタ)を取得するGCHandle
.netオブジェクトのアドレスを取得することができました
そして私はオブジェクトを思い出すことができます
目的は、アドレスをネイティブクラスに格納し、どのネイティブオブジェクトがどの.netオブジェクトに関連付けられているかに関する情報を取得することです。
割り当てのためにアドレスが変更されないことを確認してください、それは本当ですか、それとも誰かが私の目的を果たすためのより良いアイデアを持っていますか?
ありがとう
memory - Nehalem メモリ アーキテクチャのアドレス マッピング
12 GB の RAM (6x2GB) を搭載した 2 プロセッサの Nehalem Xeon サーバーの場合、メモリ アドレスは物理メモリ モジュールにどのようにマップされますか?
3 つの同一のメモリ モジュールを備えた単一のプロセッサ Nehalem では、メモリ帯域幅を向上させるためにアドレス空間がモジュール全体にストライプ化されると想像できます。しかし、どのようなストライプサイズでしょうか? そして、2 番目のプロセッサ (+ メモリ) はその状況をどのように変えるのでしょうか?