- 締切済み
皆さんが会社でソースコードを作成する際、スタックオーバーを事前にどのように
皆さんが会社でソースコードを作成する際、スタックオーバーを事前にどのように 回避、またどのように使用スタック量を把握してますか? ・関数内のオート変数を片っ端からsizeoffして加算する ・UNIX系だとGDBのフック関数を使うやり方があったような。。。? ・地道に関数を見ながら使ったオート変数の大きさを手計算する などが挙げられますが、これといって効果的な良い方法がなく 会社では皆んな頭を抱えています。 技術者としてスタック量を常に気にするのは当然ですが、短納期/徹夜しまくり の職場環境では、 ロジックを組むのに精一杯で、実装後CPU TRAPを起こしてから気づくのが実情です。 何か良い知恵があれば幸いです。 ちなみに私は、組み込み系です。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
・地道に関数を見ながら使ったオート変数の大きさを手計算する 徹夜しまくり とか 大変ですね・・・。
- eroermine
- ベストアンサー率18% (83/444)
昔8086/V30でやったことですが、 スタック領域をあらかじめ 0 もしくは特徴ある数値列で埋める。 プログラム終了時にその領域を検査すればどこまでスタックが食いこんだかがわかります。 これだと再帰が深くてもok
- chie65536
- ベストアンサー率41% (2512/6032)
一番深い所で呼ばれる関数(つまり、それ以上、関数呼び出しをしない関数)の、一番深い場所(つまり、ループやスコープが一番深い場所)にトラップを仕掛け、その時点でのスタックポインタを常時表示させる。 その表示が、コンパイル時に指示したスタックサイズの上限に近い場合には、スタックの調整を行います。 アルゴリズムがスパゲッティになってない限り「mainから一番遠い場所、一番深い場所」ってのが「必ず1つはある」し、自分がソースコードを書いている限り、それが何処なのかは自分が知っている筈。
- t4t
- ベストアンサー率55% (47/84)
一般のPCで用いるアプリケーション開発とちがって、組み込み機器での開発はスタックの制限も厳しいですよね。 そういった組み込み用途に、スタック解析ツールをもった開発環境をお使いになってはいかがでしょうか? 日立のSH、H8S、H8シリーズのプロセッサ向けとか、 あとは富士通のSOFTUNEあたりの環境ですと、静的解析でスタック使用量の算出、図示してくれたりしますよ。 (それとも、お使いになっているけど使い物にならん、ということでしょうか)