問題タブ [relative-addressing]
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.
c++ - C++、オブジェクトの絶対アドレスはリリースされるまで常に一定のままですか?
「テスト」には、RAM 上の絶対アドレスまたは RAM のゼロアドレスへの相対開始点を持つ仮想メモリ内の絶対アドレスがありますか?
例として、非常に断片化されたメモリで、10 時間にわたってそれぞれ割り当てと割り当て解除を何度も行う多くのアプリケーションを開始しました。アプリケーションの 1 つは、RAM エラー チェックとベンチマークのアプリケーションです。すべての RAM アドレスをテストできますか、それとも限られた領域でのみ実行できますか? すべての RAM に達した場合、オブジェクトを移動する以外に、OS はどのようにして他のアプリからアプリを保護できますか? 特に、固定されていないアレイを pci-e から pci-e にストリーミングする場合。
assembly - 静的変数のアドレスが命令ポインターに対して相対的なのはなぜですか?
アセンブリに関するこのチュートリアルに従っています。
チュートリアル (私もローカルで試したところ、同様の結果が得られました) によると、次のソース コード:
次のアセンブリ命令にコンパイルします。
(行番号のコメント(1)
、(2)
および(1, 2)
私が追加しました。)
質問:コンパイルされたコードでは、静的変数のアドレスが命令ポインター (RIP) に相対的であり、特定のセクションに相対的ではなく、常に変化し (行と行を参照)、より複雑なアセンブリ コードを生成するのはなぜですか?そのような変数はどこに保存されますか?b
(1)
(2)
前述のチュートリアルによると、次のようなセクションがあります。
これは、 の値がサンプル実行可能ファイルの別のセクション
b
にハードコードされており、プロセスの起動時にオペレーティング システムのローダーによってすべてのマシン コードと共にメモリに読み込まれるためです。
(私のものを強調してください。)