低レベルなヒトの覚え書き

●LSI C-86のエラー

2. 「NULL pointer assignment」(と見せかけて、本当はスタックオーバーフロー)


[補足 - その1]

最初のほうに書いたスタックの説明は、いろいろな意味で、あまり正確なものではありません。 たとえば、LSI-Cでスタックが使用されるのは、本当は、レジスタというメモリが空いていなかった場合だけだそうです(マニュアルの3章4節など)。

[補足 - その2]

スタックを消費しない変数としては、静的変数のほかにも外部(external)変数があるわけですが、一般に、外部変数はなるべく使わないほうがいいとされています。
なお、外部変数は大域(global)変数とも呼ばれます。

[補足 - その3]

筆者が参考にした「C FAQ 日本語訳」という文書は、もともとはネットニュースに投稿された記事だそうです(あちこちのウェブサイトに保存されています)。
オリジナル版のタイトルは「C Programming FAQs: Frequently Asked Questions」、作者はSteve Summitさん、日本語版の訳者は北野欽一さん。
FAQというだけあって、筆者のような低レベル者には、とても参考になる文書だと思います。

[余談]

わりと最近になって気づいたのですが、筆者がスタックオーバーフローというエラーを経験したのは、必ずしも前述した事例のときが最初ではなかったみたいです。
「みたいです」なんて他人事のような書き方をしたのは、客観的にはそれなりに確かな証拠があがっている一方(事例のものより古い時期のソースに、コンパイル時のオプションでスタックのサイズを増やすことを指示したコメントがついていた)、本人にはその辺の記憶がまったくないからです。
もしかしたら、何も考えずに指定してあった「-h」オプションのおかげで(それがたまたま有効に機能したおかげで)、あっさり問題を解決できてしまったとか、そんなところなのかもしれません。

→トップ , →ひとつ上(lsic2)


R.2: 2006/08/01
Copyright (C) 2005,2006 A.Satoshi