補講 トリビア

 本講座を読む上では全然気にしなくていいことですが、知っていると何かの役に立つかもしれない事柄を書いておきます。

 1.メモリ

 メモリは、1ビット(0か1か)を記憶する装置がたくさん並んだハードウェアです。それだと扱うのが大変なので、8ビット(1バイト)を1つの塊として扱います。メモリの場所を「アドレス」で表します。単位は「番地」です。先頭が$0000番地で、次が$0001番地、その次が$0002番地です。各アドレスには1バイトの数値があります。今便宜的に4桁で書いていますが、256MBのメモリであれば(1MBが1024×1024バイトだとして)アドレスは$0000000番地から$FFFFFFF番地までです。

 各アドレスに入っている数値をリストで表示したものをダンプリストと言います。
  ダンプリスト
 すべて16進数で書かれています。左端の数字と上端の数字がアドレスを表します。例えば左端が$0380B0で上端が6のアドレスは$0380B6番地で、入っている値は$3Dです。

 昔(Windowsが登場する以前)のパソコンは、メモリの役割が明確だったそうです。ここからここまではVRAM(ビデオラム:画面の情報を記憶するメモリ)で、ここからここまではOSが入っている場所で、ここからここまではユーザが自由に使っていい場所だ、というのが明記されていたのです。OSが入っている所はROM(Read Only Memory : 値を読むことはできるが、値を変更することはできない)で、VRAMやユーザの使用領域はRAM(Random Access Memory : 値を読むことも、変更することもできる)です。
 今では、どこが何に使われているのかなんて多くの人は知らないでしょうし、私も分かりません。今はそんな事を気にしなくてもプログラミングができる時代になったのです。
 この中のどこかにプログラムが読み込まれ、また変数を使えば、どこかにその値が記憶されます。

 メモリは、HSPのプログラムだけが使っているわけではありません。Windowsも使っていますし、インターネットエクスプローラーを立ち上げたままプログラムを走らせれば、インターネットエクスプローラーもメモリを使います。
 すると、同時にたくさんのアプリケーションを立ち上げたり、プログラム中で大量にメモリを使うと、メモリが足りなくなります。足りなくなると、スワップという現象が発生します。メモリ中のデータの一部分をハードディスクに移し、空きを作るのです。メモリに読み書きする速度よりハードディスクに読み書きする速度の方が遅いので、アプリケーションの実行が遅くなります。しかし現在のパソコンはメモリが十分に大きいので、スワップもあまり起こりません。

 2.マルチタスク

 コンピュータの中で、プログラムの命令を実際に処理している部分はCPU(Central Processing Unit:中央処理装置)です。膨大な量の計算を行い、メモリやハードディスクに読み書きし、キーボードやマウスやジョイパッドからの入力を読み取り、ディスプレイや音声出力装置にデータを送っています。HSPのプログラムを実行する時、CPUはその仕事だけをやっているわけではありません。非常に短い時間に区切って、各種アプリケーションの処理を交互に行います。例えばインターネットエクスプローラーを立ち上げたままABOGADROを動かせば、Windowsの処理をちょっとだけ行い、次にインターネットエクスプローラーの処理をちょっとだけ行い、ABOGADROの処理をちょっとだけ行い、Windowsの処理をちょっとだけ行い、……ということを延々繰り返しています。これで、あたかも複数のアプリケーションが同時に動いているように見えるのです。これをマルチタスクと言います。

 3.負の数の2進数

 一般的に、コンピュータの負の数は2の補数表現を用います。HSPもそうです。HSPの数値は32ビットの整数だと書きました。すると0から4294967295(=%1111……1、1は32個)までの数が表せるはずですが、実際にはそうではありません。符号付整数といって、一番左のビット(第31ビット)が0の場合は0以上の数、1の場合は負の数を表します。この負の数が2の補数表現で表されるのです。

 例えば今−5という数について考えてみます。5を2進数で表すと次のようになります。
  %0……0101
 すべてのビットを反転(1なら0に、0なら1に)します。
  %1……1010
 これを1の補数表現と言います。1の補数表現に1を足したものが2の補数表現です。
  %1……1011
 これが、−5を2進数で表した値です。

 次に5+(−5)を行ってみます。これは5に−5(2の補数表現)を足すことですが、5に−5(1の補数表現)を足して、次に1を足しても同じです。
  ++%0……0101
  ++%1……1010
  +-----------
  ++%1……1111

  ++%1……1111
  ++%0……0001
  +-----------
  +%10……0000
 第32ビットは入りきらないので捨てられます。これで5+(−5)は0になります。またこの結果から、−5は2の32乗−(+5)と同じであるとも言えます。

 32ビットの符号付整数で表せる最大値は2147483647(=%0111……111、1は31個)、最小値は-2147483648(=%1000……000、0は31個)です。


[目次へ][前へ][次へ] inserted by FC2 system