【C言語】スタック領域について
【C言語】スタック領域について 最近まであまりスタック領域を気にしておらず、1関数でローカル変数を10個(64バイト)宣言したりしていましたが、この前スタックオーバーフローを起こしたことをきっかけにスタック領域について考え疑問がでてきたので質問させてください。 ①関数A→関数B→関数C→関数Dのように関数を呼び続けると各関数のローカル変数や引数などがスタック領域に積まれてスタックオーバーフローが発生する原因になると思いますが、スタックオーバーフローを起こさないために心がけること・作法・テクニックなどあれば教えていただきたいです。(例えば1関数にローカル変数は何バイトくらいとか、関数A→関数B→関数C→関数Dのように何回も関数は呼ばないとかなんでもよいのでアドバイスお願いします。) ②スタック領域のサイズを知りたいのですが、printfなどでスタック領域のサイズを出力などできないのでしょうか?(sizeofみたいに簡単に出力できないでしょうか?) ③SDK、API、他者が作成していてブラックボックスとなっているような関数をコールする際はあらかじめ何バイト詰まれるか仕様を知った上で関数コールしているのでしょうか?もしそうなら、通常スタック領域の仕様サイズなど仕様書などに書いてあるのでしょうか?それとも自分でソースを解析して何バイト使用するか知るのでしょうか?一般常識としてスタック領域を使用するバイト数が決まっていたりする? ④関数内でローカル変数をたくさん使いたいが、スタックオーバーフローが気になる場合はどうする?その関数でしか使用しないがグローバル変数で宣言もしくは動的メモリ確報する? ⑤その他スタック領域について何かアドバイスあればお願いします。