タグ付けされた質問 「memory-allocation」

8
変数はプログラムスタックにどのように格納され、そこから取得されますか?
この質問の素朴さに謝罪します。私は50歳のアーティストで、初めてコンピューターを正しく理解しようとしています。だからここに行きます。 私は、データ型と変数がコンパイラによってどのように処理されるかを理解しようとしています(非常に一般的な意味で、私はそれがたくさんあることを知っています)。「スタック」のストレージと値型、および「ヒープ」のストレージと参照型の関係についての理解が不足しています(引用符は、これらの用語が抽象化であって、私がこの質問を組み立てているように、そのような単純化されたコンテキストで文字通りに取られすぎます)。とにかく、私の単純なアイデアは、ブールや整数のような型は「スタック」に行くということです。なぜなら、それらはストレージスペースの観点から既知のエンティティであり、スコープはそれに応じて簡単に制御できるからです。 しかし、スタック上の変数がアプリケーションによって読み取られる方法はわかりませんx-たとえばx = 3、宣言して整数として割り当て、ストレージがスタック上に予約され、その値が3そこに格納され、次に同じ機能Iを宣言し、アサインy言う、など4そして、私はその後、使用することを、次のx別の表現では、(と言うz = 5 + xプログラムを読むことができるか)xを評価するためにz、それは以下であるときyスタックに?私は明らかに何かが欠けています。スタック上の場所は変数の有効期間/スコープにすぎず、スタック全体が常にプログラムから実際にアクセス可能であるということですか?もしそうなら、値を取得できるようにスタック上の変数のアドレスのみを保持する他のインデックスがあることを意味しますか?しかし、その後、スタックのポイントは、値が変数アドレスと同じ場所に格納されていることだと思いましたか?私のちっぽけな心では、この他のインデックスがある場合、私たちはよりヒープのようなものについて話しているようです?私は明らかに非常に混乱しており、単純な質問に対する簡単な答えがあることを望んでいます。 ここまで読んでくれてありがとう。

3
一定時間の操作で賢いメモリ管理?
固定サイズのブロックを含む2つの基本的なメモリ割り当て操作を実行できるメモリセグメント(必要に応じてファイルのようにサイズが拡大または縮小できる)を考えてみましょう。 1つのブロックの割り当て 使用されなくなった以前に割り当てられたブロックを解放します。 また、要件として、メモリ管理システムは現在割り当てられているブロックを移動することはできません。インデックス/アドレスは変更しないでください。 最も単純なメモリ管理アルゴリズムは、グローバルカウンタ(初期値0)をインクリメントし、その新しい値を次の割り当てのアドレスとして使用します。ただし、割り当てられたブロックがわずかしか残っていない場合、セグメントを短くすることはできません。 より良いアプローチ:カウンターを保持しますが、割り当て解除されたブロックのリスト(一定時間で実行可能)を維持し、空でない限り、新しい割り当てのソースとして使用します。 次は何?メモリセグメントを可能な限り短く保つ、一定の時間の割り当てと割り当て解除の制約があるにもかかわらず、できる賢いことはありますか? (目標は、現在割り当てられていないブロックを最小のアドレスで追跡することですが、一定の時間では実現できないようです…)

1
純粋なデマンドページング中のスワップスペース管理
以下は、OSのホーム割り当てを行っているときに出くわした疑いです。しかし、それは単純なコーディングの質問よりも概念ベースのように思われるので、私は宿題タグがこれに適しているとは思いません。 一定量のRAMとスワップメモリ​​を指定して、同時に実行されている複数のプロセスの純粋なデマンドページングスキームで、スワップスペースに対して次の2つのケースで何が起こるか プロセスでページフォールトが発生し、RAMに使用可能な空きフレームがないため、プロセスのカーネルフレームのチャンクのページの1つをスワップに書き出す必要があります(簡単にするため、コピーは考慮していません) -on-write case)。明示的に、スワップスペースのどこにこのフレームが書き込まれ、そのためにどのデータ構造を更新する必要がありますか? プロセスが特定のページをページインする必要がある場合、それはスワップメモリ​​のどこにあり、その特定のページがスワップに存在するかどうかをどのようにして知るのでしょうか? ご想像のとおり、純粋な需要管理スキーム中にスワップスペースをどのように管理するか、およびどのデータ構造が不可欠であるかを理解することが困難です。回答のリンクを参照していただければ幸いです(「オペレーティングシステムの概念-Silberschatzによる第8版で検索しましたが、質問に対する明確な回答が見つかりませんでした)。

2
誰かがこの図をスラブ割り当てについて説明できますか?
スラブ割り当ての仕組みと、通常のページングとは異なる、または優れている理由を理解しようとしています。 私は、この図見つけ、私はそれがより説明があった場合には参考になると信じています。 いくつかの質問: 3KBと7KBのアイテムは何を表していますか?彼らはどういうわけか関連している必要がありますか?なぜそれらはそのようにパッケージ化されているのですか? キャッシュ列で、キャッシュは灰色のボックスですか、それとも灰色のボックス内の白/青のボックスですか?灰色のボックスはキャッシュのパッケージですか? スラブは単なる青いボックスですか、それとも「物理的な隣接ページ」全体がスラブですか? 私は本当にいくつかの助けに感謝します。ありがとう!

3
ハッシュテーブルの値はどのように物理的にメモリに格納されますか?
質問: 効率的に使用され、値を頻繁に再配置する必要がない場合に、ハッシュテーブルの値はどのようにメモリに格納されますか? 私の現在の理解(間違っている可能性があります): ハッシュテーブルに3つのオブジェクトが格納されているとしましょう。それらのハッシュ関数はこれらの値を生成します: 0 10 20 これらのオブジェクトのポインタは、次のメモリアドレスに格納されません。これらのオブジェクト間には大きなギャップがあるためです。 startOfHashTable + 0 startOfHashTable + 10 startOfHashTable + 20 ハッシュテーブル上のWikipediaの記事は、「インデックス」とは、のように計算されていることを述べています: hash = hashfunc(key) index = hash % array_size したがって、私の例では、インデックスは次のようになります。 0%3 = 0 10%3 = 1 20%3 = 2 これにより、前述の大きなギャップが解消されます。このモジュロスキームを使用しても、ハッシュテーブルにさらにオブジェクトを追加すると問題が発生します。ハッシュテーブルに4番目のオブジェクトを追加すると、インデックスを取得するために%4を適用する必要があります。これで、過去に行った%3はすべて無効になりませんか?以前の%3のすべてを%4の場所に再配置する必要がありますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.