スタックの概念は、多くの初級プログラマが分かったつもりになっている
ものの代表格です。
というのも、スタックについて解説している書籍がそもそも少なく、
また解説があったとしても、配列を用いて擬似的なスタックを作っただけで
話が終わってしまっているものが非常に多いためです。
スタックはそもそもCPUに始めから実装されているFIFO方式の機構であり、
メモリ上のスタック領域を使用します。利用目的はデータの一時的退避
ですが、関数を呼び出す処理もこのスタックにより実現されています。
スタックの位置はスタックポインタSPと呼ばれるCPUレジスタにより
管理されていて、PUSH,POP,CALL,RET等の命令により操作されます。
これらの命令はアセンブリ言語と呼ばれる低水準言語です。
自動変数などは、このスタック上に確保されてしまいますので、
画像データなどを配列でどかっとこの領域に確保しようとすると
たちまちオーバーフローを起こします。スタック領域はあまり
大きくないのです。
最近はC言語にしても、Javaにしても多数の入門書が出版されていて
誰もが簡単にプログラムを始められるようになりました。入門の
敷居が下がって誰もがプログラムを始めやすくなったのはよいのですが、
ハードウェアレベルの知識は全く・・・という人が多くなってしまいました。
特にメモリの知識はビル建築で例えるなら土台に相当します。土台がもろくても
ある程度の高さならたえられますが、ある高さを超えた瞬間一気に
崩れてしまうものです。
土台固めにはアセンブリ言語の習得が一番の近道です。
ものの代表格です。
というのも、スタックについて解説している書籍がそもそも少なく、
また解説があったとしても、配列を用いて擬似的なスタックを作っただけで
話が終わってしまっているものが非常に多いためです。
スタックはそもそもCPUに始めから実装されているFIFO方式の機構であり、
メモリ上のスタック領域を使用します。利用目的はデータの一時的退避
ですが、関数を呼び出す処理もこのスタックにより実現されています。
スタックの位置はスタックポインタSPと呼ばれるCPUレジスタにより
管理されていて、PUSH,POP,CALL,RET等の命令により操作されます。
これらの命令はアセンブリ言語と呼ばれる低水準言語です。
自動変数などは、このスタック上に確保されてしまいますので、
画像データなどを配列でどかっとこの領域に確保しようとすると
たちまちオーバーフローを起こします。スタック領域はあまり
大きくないのです。
最近はC言語にしても、Javaにしても多数の入門書が出版されていて
誰もが簡単にプログラムを始められるようになりました。入門の
敷居が下がって誰もがプログラムを始めやすくなったのはよいのですが、
ハードウェアレベルの知識は全く・・・という人が多くなってしまいました。
特にメモリの知識はビル建築で例えるなら土台に相当します。土台がもろくても
ある程度の高さならたえられますが、ある高さを超えた瞬間一気に
崩れてしまうものです。
土台固めにはアセンブリ言語の習得が一番の近道です。
#
by pcinfo
| 2004-12-25 09:55
