C言語で作ったプログラムはコンパイル時にスタック領域の容量をOS側が自動的に割り当てると思いますが、自分で作ったプログラムのスタック領域の容量を確認することは可能でしょうか?
また仮想メモリ空間の容量の確認方法も教えていただければと思います。
もしかして、OSやCPUのアーキテクチャによって容量は固定ですか?
それはないと思いますが・・・
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
たとえばWindowsプログラムでしたら、できあがったEXE形式ファイルについてPEビュワーを見てみるなりしてみればこの構成が分かると思います。まあ目的の情報が得られるとは限りませんが。起動後の状態が知りたいならば、「プロセス」について学ぶといいでしょう。
ちなみに一般論の話であれば「そもそもスタックが存在するとは限らない」という回答となります。「C言語では文法上、ローカル変数はスタック領域に置かれる」とかいう言葉をよく聞きますが、こんな規則は存在しません。コンパイラが対象ハードウェアに合わせて機械語を生成するので、この仕様に依存するだけです。
要するに、C言語ではなくOSについて学ばないと意味がありません。
投稿2016/08/22 05:02
総合スコア4830
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/08/22 08:36
0
他の方の回答にあるように、スタック領域や仮想メモリの管理は基本的にOSが管理する物なので、その詳細仕様などを知りたい場合は各OSの勉強が必要となります。(最近の一般的なOSなら、基本的な考え方、概念は似通っていると思いますが)
Windowsの場合は、WindowsOSのカーネル内部を説明した下記書籍で勉強するのが一番良いと思います。(少しお高い本ですが)
インサイドWindows 第6版 上
雰囲気だけでも良ければ、VMMapというツールを使用すれば、各プロセスの仮想メモリ領域が実際にどのような目的で使用されているかの詳細が表示できます(ユーザー用アドレス空間のみで、カーネル用アドレス空間は見えませんが)
以上、ご参考までに。
投稿2016/08/22 18:11
編集2016/08/22 18:40総合スコア344
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
linuxならulimitで設定できます。
デフォルトは10MBだった気がします。
http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230911/?rt=nocnt
スタックの使用量を計測したいという話であれば、プロファイラーを使うんじゃないでしょうか?
とりあえず手元にあった環境でもvalgrindを使ったら出ました。
valgrind --tool=drd --show-stack-usage=yes ./a.out ==12453== drd, a thread error detector ==12453== Copyright (C) 2006-2013, and GNU GPL'd, by Bart Van Assche. ==12453== Using Valgrind-3.10.0 and LibVEX; rerun with -h for copyright info ==12453== Command: ./a.out ==12453== 18 ==12453== thread 1 finished and used 7495 bytes out of 8388608 on its stack. Margin: 8381113 bytes. ★ここ ==12453== ==12453== For counts of detected and suppressed errors, rerun with: -v ==12453== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
投稿2016/08/22 05:27
総合スコア910
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。