問題タブ [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.
ip - N 番目のコンピューターの IP アドレス指定
問題は、次の情報を計算することです。
「ip サブネット ゼロ、最初の ip、最後の ip、ブロードキャスト、ip サブネット マスク」
X 台の PC のクラス B IP (172.16.0.0/16) の場合、たとえば 27811 台のコンピューターの場合...
c - Cを使用してアドレス行数とRAMワードサイズを決定する
Cを使用してプロセッサのアドレス行数を決定する方法を教えてもらえますか?アドレスラインの数はレジスタのサイズと比較して異なる可能性があるため、これをプロセッサレジスタのサイズと等しくすることはできません(たとえば、8086ではアドレスラインは20で、レジスタのサイズは16です)。
同様に、Cプログラムを介してRAMのワードサイズ(アドレス可能な各場所のサイズを意味する)を見つけることができますか?
c++ - C++ でポインタのアドレス指定はどのように機能しますか
変数のアドレスを指すポインターについて混乱しています
最後の2バイトを指しますこれはどのように機能しますか
.
multithreading - アセンブリ/マルチタスクでのメモリアドレス指定
マシンコードのプログラムがメモリからレジスタに値をロードしたり、ジャンプを実行したり、レジスタに値をメモリに格納したりする方法は理解していますが、これが複数のプロセスでどのように機能するかはわかりません。プロセスにはその場でメモリが割り当てられるので、相対アドレス指定を使用する必要がありますか?これは自動的に行われますか(相対ジャンプなどを実行するアセンブリ命令があることを意味します)、またはプログラムはアドレス指定するすべてのメモリ位置に正しいオフセットを「手動で」追加する必要がありますか。
マルチタスクに関してもう1つ質問がありますが、これは多少関連しています。実行されていないOSは、どのようにしてスレッドを停止し、次のスレッドに進みますか。これは時限割り込みで行われますか?もしそうなら、どのようにしてレジスターの値をスレッドのために保存することができますか。制御が別のスレッドに与えられる前に、それらはメモリに保存されますか?または、時限割り込みではなく、スレッドは単に制御を放棄するのに適した時間を選択しますか。時限割り込みの場合、スレッドにプロセッサ時間が与えられ、それを必要としない場合はどうなりますか。それを無駄にする必要がありますか、それは手動で割り込みを呼び出すことができますか、それとも多くの時間を必要としないことをOSに警告しますか?
編集:または、実行可能ファイルを実行する前に編集して、正しいオフセットを補正しますか?
gcc - 静的変数とローカル変数のアドレッシングモード
ローカル変数が間接的にアドレス指定されるのに、静的変数が直接アドレス指定されるのはなぜですか?地元の人にとって、間接参照がどこから来ているのかわかりません!
c++ - C++ ハッシュ: オープン アドレッシングとチェーン
連鎖の場合:
誰かが私にこの概念を説明し、理論的な例と簡単なコードを提供してくれませんか?
「各テーブルの場所は、この場所にハッシュされるアイテムのリンクされたリスト (チェーン) を指している」という考えは得られますが、実際に何が起こっているのかを説明することはできません。
h(x) (ハッシュ関数) = x/10 mod 5 があるとします。12540、51288、90100、41233、54991、45329、14236 をハッシュすると、どのようになりますか?
また、オープン アドレッシング (線形プロービング、二次プロービング、すべての R ロケーションのプロービング) についても、誰かが私に説明してくれますか? グーグルで試してみましたが、さらに混乱しているようです。
cuda - CUDA 共有メモリのアドレス指定
カーネルで共有メモリ配列を宣言すると、同じサイズの配列がすべてのスレッドで宣言されることを理解しています。のようなコード
各スレッドで 20 バイトの配列を作成します。私が理解している共有メモリのアドレス指定は、すべてのスレッドにわたって普遍的であるということです。したがって、添え字 10 を次のように指定すると、
これは、すべてのスレッドでまったく同じメモリ位置です。添え字 10 の異なる共有メモリ アドレスに異なるスレッドがアクセスすることはありません。これは正しいですか? もちろん、コンパイラは添え字が範囲外であるという警告をスローします。
matlab - MATLAB: 論理インデックスを使用して部分行列を抽出する
MATLAB でのこの非常に単純な問題に対するエレガントな解決策を探しています。行列があるとします
および次の形式の論理変数
の値にM
関連付けられている の要素を取得しようとすると、列ベクトルが得られます1
I
[5 7 ; 6 13]
この論理インデックスから行列を取得する最も簡単な方法は何ですか?
の非ゼロ要素の形状がわかっている場合はI
、インデックス作成後に形状変更を使用できますが、これは一般的なケースではありません。
また、MATLAB でのこのタイプのインデックス付けの既定の動作は、ゼロ以外の値がI
行列を形成しない場合に関して一貫性を強制することを認識していますが、この特定のケースに対する簡単な解決策があるかどうか疑問に思います.
c++ - C / C ++でランタイムからメモリオフセット計算をオフロードする方法は?
単純なVMを実装しており、現在、ランタイム演算を使用して、ベースポインターからのオフセットとして個々のプログラムオブジェクトアドレスを計算しています。
今日はこの件についていくつか質問をしましたが、どこにもゆっくりと進んでいないようです。
質問1からいくつかのことを学びました- オブジェクトと構造体のメンバーアクセスとアドレスオフセットの計算-最新のプロセッサには仮想アドレス指定機能があり、算術演算に専念する追加のサイクルなしでメモリオフセットを計算できることを学びました。
そして質問2から-アドレスオフセットはC/C ++のコンパイル時に解決されますか?-オフセットを手動で行う場合、これが発生する保証はないことを学びました。
ここまでで、私が達成したいのは、ハードウェアの仮想メモリアドレス指定機能を利用し、それらをランタイムからオフロードすることであることは明らかです。
プラットフォームに関してはGCCを使用しています-Windowsのx86で開発していますが、VMであるため、GCCでサポートされているすべてのプラットフォームで効率的に実行したいと考えています。
したがって、この主題に関する情報は歓迎され、非常に高く評価されます。
前もって感謝します!
編集:私のプログラムコード生成の概要-設計段階では、プログラムはツリー階層として構築され、オブジェクトにインデックスを付け、プログラムメモリブロックの先頭からのオフセットを計算するとともに、1つの連続したメモリブロックに再帰的にシリアル化されます。
編集2:VMの擬似コードは次のとおりです。
ケース1は、命令の直後にある1つのパラメーターを受け取る関数であるため、命令から1バイトのオフセットとして渡されます。命令ポインタは、次の命令を見つけるために1+最初のパラメータのサイズだけインクリメントされます。
ケース2は、前と同じように2つのパラメーターを受け取る関数で、最初のパラメーターは1バイトのオフセットとして渡され、2番目のパラメーターは1バイトのオフセットと最初のパラメーターのサイズとして渡されます。次に、命令ポインタは、命令のサイズと両方のパラメータのサイズによってインクリメントされます。
ケース3はgotoステートメントであり、命令ポインターはgoto命令の直後に続くオフセットによってインクリメントされます。
編集3:私の理解では、OSは各プロセスに専用の仮想メモリアドレス空間を提供します。もしそうなら、これは最初のアドレスが常に...よくゼロであることを意味します、それでメモリブロックの最初のバイトからのオフセットは実際にはこの要素のまさにアドレスです?メモリアドレスがすべてのプロセス専用であり、プログラムメモリブロックのオフセットとメモリブロックの最初のバイトからのすべてのプログラムオブジェクトのオフセットがわかっている場合、オブジェクトアドレスはコンパイル時に解決されますか?
問題は、これらのオフセットがCコードのコンパイル中に使用できないことです。これらのオフセットは、「コンパイル」フェーズおよびバイトコードへの変換中に認識されるようになります。これは、「無料」のオブジェクトメモリアドレス計算を行う方法がないことを意味しますか?
たとえば、仮想マシンのみがマシンコードにコンパイルされるJavaでこれはどのように行われるのでしょうか。これは、実行時の演算のために、オブジェクトアドレスの計算にパフォーマンスの低下が生じることを意味しますか?
assembly - x86 でのアドレッシング
x86 でのアドレス指定に問題があります。誰かがこれが何をするのか教えてもらえますか: