リストHOME  リストOpen Source

第11回VBAプログラム豆知識

概要 ~ 1キロバイト? ~

 今回は、ちょっと余談なのですが、インターネットなどのサンプルプログラムのコメントで、『1キロバイトのメモリを確保…』、なんて、書かれてあるのを見たことありませんか?



    '1キロバイトメモリを確保 
    Dim bufs(1023) as Byte

 実際にソースコードをよく見ると、上記のようにByte型で、1024バイト確保しているのですが、これって、1キロバイト丁度ではありませんよね。ここに、疑問を感じた方は、いませんでしょうか。


 『1キロバイトって1000バイトのはず。』、そうなんです、数学的には、1キロは、1000丁度なのですが、システム屋さんの世界では、1キロバイトは1024なんです。


 これ、答えを先に言っちゃうと、システム屋さんは、2のn乗で、物事を考えるというのが理由です。1024は、2の10乗ですよね。先にも言いましたが、数学的には、矛盾しているのですが、この考え方が、システムの世界では、慣習となっています。


 ですので、システムやプログラムに関する情報で、4キロバイトの表記を見たら、4(2の2乗)×1024(2の10乗)バイトだと思った方が良いと思います。


 ちなみに、キロやメガなどは、システムに限らず、10のn乗を表す、国際単位系(SI:International System of Units)として定められいて、SI接頭辞と呼ばれています。


代表的なSI単位
表記表記(英字)単位
キロK10の3乗
メガM10の6乗
ギガM10の9乗
テラT10の12乗
ペタP10の15乗


 第3回のVBAプログラム豆知識で『メモリ空間』を説明しましたが、この中で、Windows上のプログラム(プロセス)は、4ギガバイトのメモリ空間を持っていることに触れましたが、皆さん、覚えていますでしょうか?


 この4ギガバイトも、4ギガ丁度ではなく、4294967296(2の32乗)が正解です。メモリ空間は、0~4294967296(&HFFFFFFFF)と、捉えてください。これはOSが、メモリ空間のアドレスを、4バイトのデータ型(符号無し)で管理するため、そのようになっています。


 このシステム屋さんの慣習、データのサイズだけではありません。CPUの種別として、32ビットCPU、64ビットCPUなどの表記を、目にしたことはありませんでしょうか。これも、それぞれ2の5乗(32)、2の6乗(64)で、2のn乗となっていますね。昔、ゲーム機で、任天堂64なんてありましたが、これも一緒です。
 これは、ハードウェアのデータ入出力の、データバス幅からそのようになっています。


 それでは、『データ幅って何?』と疑問を感じると思いますので、キーボードとモニタを使った簡単な例を使って、説明したいと思います。

データ幅のサンプル


 キーボードとモニタを直接接続した構成で、入力したキーに対応する文字を、モニタで表示する単純な仕組みがあったとします。但し、ここでは、半角文字(片仮名除く)のみに対応した仕様とします。


 半角文字のみの表示なので、以下のアスキーコード表によると、&H00~&H7Fまでが表現できれば、良いことになります。従って、ビット数としては、7ビットあれば、表示する文字を判定することができます。

アスキーコード


 文字を判定するには、7ビットあればよいのですが、もう一つ、モニタ側が、キーが押されたことを知るためのタイミングが必要になります。ですので、このタイミングを検知するための、同期信号として、もう1ビット必要となります。


 通常、このモニタのようなハードウェアは、同期信号の立ち上がり、もしくは、立ち下りに同期して、他のビットのデータ(文字種)を読み出します。


 ですので、モニタ側で、キーボードにより入力された文字を表示するために、必要なデータの入出力は合計で8ビットということになり、モニタとキーボード間の、信号を送受信するための物理的な配線(Line)も、8本という構成になります。


 この8ビットというデータ入出力の幅が、データ幅といわれるものです。


 今では、文字コード体系がユニコードが主流になったこと、また、英語圏以外の言語に対応したことにより、文字コードは、複数バイトになっていますが、C言語に、文字を扱うデータ型として、char型という1バイトのデータ型が、存在するのは、このあたりが理由だと思います。


 映画『スティーブ・ジョブズ』で、ジョブズとその仲間が、マッキントッシュの原型ともいえる、コンピュータをガレージで、開発していますが、その中で、キーボードとモニタを接続して、文字を表示しているワンシーンがあります。おそらく、今回、説明に使った例と、似たような仕組みだったのでは、ないでしょうか。



第10回  <  >  第12回



所感

 『システム屋さんは、2のn乗で物事を考える』なんて、書きましたが、メモリを確保する際に、必ず2のn乗で、確保しなければ、いけないということではありません。数学的に、矛盾している点を、理由も含めて、説明したかったので、今回、この話をテーマにしてみました。


 自分の思ったサイズ、数値でコーディングすることで、まったく問題ありませんので… 大切なのは、正しくプログラムが動作することです。


連絡先

 ご意見・ご要望等ありましたら、画面最下部のメールアドレスまでご連絡ください。




エクセルバックアップ・ページのフッター
管理者のメールアドレス