質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

アーキテクチャ

アーキテクチャとは、情報システム(ハードウェア、OS、アプリケーション、ネットワーク等)の設計方法、設計思想、設計思想に基づいて構築されたシステム構造をアーキテクチャと呼びます

Q&A

解決済

3回答

2165閲覧

プログラムのメモリ領域について

strike1217

総合スコア651

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

アーキテクチャ

アーキテクチャとは、情報システム(ハードウェア、OS、アプリケーション、ネットワーク等)の設計方法、設計思想、設計思想に基づいて構築されたシステム構造をアーキテクチャと呼びます

0グッド

0クリップ

投稿2016/08/22 03:25

C言語で作ったプログラムはコンパイル時にスタック領域の容量をOS側が自動的に割り当てると思いますが、自分で作ったプログラムのスタック領域の容量を確認することは可能でしょうか?
また仮想メモリ空間の容量の確認方法も教えていただければと思います。

もしかして、OSやCPUのアーキテクチャによって容量は固定ですか?
それはないと思いますが・・・

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yohhoy

2016/08/22 04:37

対象OSは何でしょうか?特定しない一般論としての質問ですか?(特定したほうが具体的な回答がつくと思います)
guest

回答3

0

たとえばWindowsプログラムでしたら、できあがったEXE形式ファイルについてPEビュワーを見てみるなりしてみればこの構成が分かると思います。まあ目的の情報が得られるとは限りませんが。起動後の状態が知りたいならば、「プロセス」について学ぶといいでしょう。

ちなみに一般論の話であれば「そもそもスタックが存在するとは限らない」という回答となります。「C言語では文法上、ローカル変数はスタック領域に置かれる」とかいう言葉をよく聞きますが、こんな規則は存在しません。コンパイラが対象ハードウェアに合わせて機械語を生成するので、この仕様に依存するだけです。

要するに、C言語ではなくOSについて学ばないと意味がありません。

投稿2016/08/22 05:02

HogeAnimalLover

総合スコア4830

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

strike1217

2016/08/22 08:36

ローカル変数がスタック領域に置かれるという規則は存在しないんですか!! ほぉ? そうなんですか ありがとうございます。 まだまだ勉強が足りませんね。もっと頑張ります。
guest

0

他の方の回答にあるように、スタック領域や仮想メモリの管理は基本的にOSが管理する物なので、その詳細仕様などを知りたい場合は各OSの勉強が必要となります。(最近の一般的なOSなら、基本的な考え方、概念は似通っていると思いますが)

Windowsの場合は、WindowsOSのカーネル内部を説明した下記書籍で勉強するのが一番良いと思います。(少しお高い本ですが)
インサイドWindows 第6版 上

雰囲気だけでも良ければ、VMMapというツールを使用すれば、各プロセスの仮想メモリ領域が実際にどのような目的で使用されているかの詳細が表示できます(ユーザー用アドレス空間のみで、カーネル用アドレス空間は見えませんが)

以上、ご参考までに。

投稿2016/08/22 18:11

編集2016/08/22 18:40
KenjiToriumi

総合スコア344

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

strike1217

2016/08/22 22:49

VMMapというツールがあるのですね。 見てみますね。
guest

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

nullbot

総合スコア910

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

strike1217

2016/08/22 08:34

ほえええええ。 すごいです。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問