ヒープとスタックの物理的な表現は何ですか?


9

.bssとコードが、プログラムカウンターがカウントアップできる命令のメモリバンクがあり、bss(ブロック開始シンボル)が単なるグローバルデータであるプロセッサで、物理表現を簡単に理解できます。ただし、ローカル変数のスタックと動的メモリのヒープがあります。これらのものはどのように物理的に回路上に置かれますか?

回答:


6

注:私はx86に最も精通しており、広く文書化されているため、ほとんどx86を参照しています。

x86(および他のほとんどのアーキテクチャー)では、スタックは他のすべてと同様にメモリに常駐します。プロセッサは、通常レジスタ(スタックポインタ)に格納されているポインタを介してスタックを操作します。プッシュおよびポップ命令は、スタックポインターの値を変更し、スタックの先頭がどこにあるかを変更します。

ヒープはソフトウェアの抽象化です。名前が示すように、アロケータがスライスしてポインタを渡すRAMの塊にすぎません。物理的には、ヒープはRAMの他の部分とまったく同じように見えます。

ただし、ページングとセグメンテーションはヒープに接線的に関連しています。これらは主にマルチタスクに関係しており、プロセスが明示的に所有していないRAMを変更することはできません。


3
ページングは​​、一般にメモリ管理に関するものです。物理メモリが論理アドレスにマップされるユニットです。アクセス制限だけではありませんが、後者はメモリ管理ユニットの追加機能として適用される傾向があります。
Chris Stratton

4

論理的に言えば、スタックとヒープは通常、単なるメモリです。ただし、実装レベルでは、主にキャッシュから提供されます。ほとんどのシステムでは、キャッシュアルゴリズムを介して動的にそこに到達しますが、キャッシュまたはその他の通常よりも速いメモリでの明示的な位置をサポートするシステム、および特定のデータが優先的に配置される必要があるというヒントを残すことをサポートするシステムもありました。スペースに余裕があります。

低レベルのソフトウェアとコンパイラのコードジェネレーターの設計では、データアクセスの構成を考慮に入れて、一定のキャッシュミスではなく、適切なキャッシュ使用率が得られる可能性が高いと考えています。

一部のプロセッサには、1つの深さの明示的なスタックキャッシュのように機能するリターンアドレスレジスタがあります(例は思い浮かびませんが、いくつかの深いハードウェアスタックを持つものもあります)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.