プログラムの構造と実行
情報の表現と処理
ほとんどのコンピュータは、シーク可能な最小のメモリユニットとして、1ビットではなく1バイトである8ビットを使用します。
マシンレベルのプログラムは、メモリを仮想メモリと呼ばれる非常に大きなバイト配列として扱います
メモリの各バイトには、識別するための一意の番号、つまりアドレスがあります
すべてのアドレスの集合は仮想アドレス空間です
ポインタはC言語の重要な機能です。ポインタは、データ構造の要素のメカニズムを提供します。これは、変数に似ています。ポインタも2つの値と型を持っています。値はオブジェクトの場所を示し、その型は格納されている場所を示しますオブジェクトのタイプ
表現に16進数を使用する一般的なバイト表現、理由ビット:8ビット値を表すのに2進数を使用すると長すぎ、10進数の変換を使用するのが複雑すぎる場合は、通常、16進数を使用して表現します(バイナリは16進数が簡単であることを意味し、4つのグループごとに右から左に変換できます)したがって、2つの16進数が1バイトであることもわかります。
C言語では、16進数は0xまたは0Xで始まります
各コンピュータには、既知のポインタデータの公称サイズであるワード長があります。
仮想アドレスはそのようなワードでエンコードされるため、ワード長によって決まる最も重要なシステムパラメータは、仮想アドレス空間の最大サイズです(つまり、ワード長がsビットのマシンの場合、仮想アドレスの範囲は0-2 ^ s-1、つまり、プログラムは2 ^ sバイトまでアクセスできます0)
ほとんどのマシンが32ワードマシンから64ワードマシンに切り替えられました(ほとんどの64ビットマシンは32ワードプログラムを実行でき、下位互換性があります)。
32ワードの仮想アドレス空間は4ギガバイト(つまり、4GB)であり、64ビットのワード長が約1.84 * 10 ^ 19バイトに拡張された後、仮想アドレス空間は16EBに拡張されます。
(1EB = 1024PB、1PB = 1024TB、1TB = 1024GB)
32ビットプログラムと64ビットプログラムの違いは、プログラムのコンパイル方法であり、マシンが実行されているマシンのタイプではありません。
アドレス指定とバイト順
複数のバイトにまたがるプログラムオブジェクトの場合、2つの規則を確立する必要があります。1このオブジェクトのアドレスは何か2これらのバイトをメモリに配置する方法
マルチバイトオブジェクトは連続したバイトのシーケンスとして格納され、オブジェクトのアドレスは使用されるバイトの最小アドレスです。
一部のマシンは、メモリに有効なバイトの順序でオブジェクトを格納することを選択します。また、一部のマシンは、オブジェクトを高から低の順に格納します。前者のルールの最下位バイトはフロントでリトルエンディアンと呼ばれ、後者のルールの最上位バイトはフロントでビッグエンディアンと呼ばれます
ほとんどのIntelマシンはリトルエンディアンモードを使用します
電話のオペレーティングシステムAndroidおよびIOSは、リトルエンディアンモードでのみ実行できます。
プログラムのマシンレベルの表現
リバースエンジニアリング:システムの研究とリバースワークを通じて、システム作成のプロセスを理解する
ランダムアクセスメモリ
タイプ:静的、動的
スタティックRAM(SRAM)はダイナミックRAM(DRAM)より高速ですが、より高価です
SRAMは、CPUチップまたはオフチップのキャッシュメモリとして使用されます。
DRAMはメインメモリおよびグラフィックスシステムのフレームバッファーとして使用されます