No.4ベストアンサー
- 回答日時:
初期化していない変数の初期値は、言語仕様によりますが、
スタック領域に定義される変数は、たいていの言語で、初期値は不定です。
更に言えば、最後に使われた「不明」な値が残っていることでもなく、
Cの関数、JAVAのメソッドが呼び出される都度、初期値はランダムに変化するので、
「不明」ではなく、まさに「不定」です。
何故ランダムに変化するかについてですが、
まず、スタック領域の説明です。
スタック領域は、一時的な値の保存場所です。
スタックポインタによって管理されており、
スタックポインタが指しているアドレスより下(高位)は使用中、
上(低位)は使用可能となっています。
使用可能
========================== <= スタックポインタ
使用中
そして、使用可能領域は、常に割り込みルーチンにより使用されているので、
常時書き換わっています。
割り込みとは、キーが押された、マウスが動いた、通信データが受信された、
時間が経過した、等の、プログラムとは直接関係ないイベントのことで、
その発生時には、実行中のプログラムに割り込んで、
必要な処理(キーを読む、マウスポインタを動かす、通信データを読む等)を行い、
その後は何事もなかったかのように、元のプログラムの実行が継続されます。
しかし、元のプログラムの実行を継続させるためには、
割り込み時の状態をどこかに保存し、終了時には復元する必要があるわけで、
その際にスタック領域が使われます。
割り込みが発生した際のスタックの動きは以下の通りです。
- 戻りアドレスがスタックにpushされる
- フラグがスタックにpushされる
- 割り込みルーチンが呼び出される
- 保存の必要なレジスタがスタックにセーブされる
- 作業領域を確保する
- 割り込みの処理後、レジスタが復元される
- フラグが復元され、戻りアドレスに戻る、同時にスタックポインタが戻される
========================== <= 割り込み中のスタックポインタ
作業領域
--------------------------
レジスタ退避
--------------------------
フラグ
--------------------------
戻りアドレス
========================== <= 割り込み前後のスタックポインタ
使用中
話を戻しますが、プログラムでも、Cの自動変数、JAVAのローカル変数のような
一時的な変数は、スタック領域に定義されます。
C言語の例ですが、
sub(int a, int b)
{
int c,d;
の場合、関数が呼び出される際のスタックの動きは以下の通りです。
- パラメータ a, b がスタックにpushされる
- 戻りアドレスがスタックにpushされる
- 関数subが呼び出される
- 保存の必要なレジスタがスタックにセーブされる
- c, d の領域がスタックに確保される
- 関数の処理後、レジスタが復元される
- 戻りアドレスに戻る
- スタックポインタが呼び出し前の値に戻される
========================== <= 関数処理中のスタックポインタ
d
--------------------------
c
--------------------------
レジスタ退避
--------------------------
戻りアドレス
--------------------------
a
--------------------------
b
========================== <= 関数呼び出し前のスタックポインタ
使用中
c, d については、領域を確保する(スタックポインタを減らす)だけで
初期化はしないので、その時のメモリの内容が初期値になります。
そして、前述のように、使用可能なスタック領域は、
常に割り込みルーチンによって書き換えられているので、
以前の値が残っていることもなく、実行する都度、初期値が変わる「不定」です。
>目的は、スタック領域でメモリ障害の場合動作が変わってしまうのか、確認したいためです。
マルチタスクOSの場合、メモリも仮想化されているので、
プログラムが認識するメモリと物理的なメモリとは、直接の対応はないし、
メモリ障害の場合、たいていはその場でシステムダウンになります。
また、スタック領域の変数の初期値が、実行するたびに違うということなら、
スタックの性質上、それが正しい動作であり、メモリの障害ではありません。
No.3
- 回答日時:
明示的にプログラムで何もしていなければコンパイラ次第です。
> スタック領域でメモリ障害の場合動作が変わってしまうのか
意図をはかりかねますが、ゼロクリアしていようがいまいが、PUSHしていないスタックをPOPしたら不正動作ですし、書き換えられたスタックをPOPすれば何が起きても不思議はないですよね。
スタック回りの障害を考えるなら、スタック自身だけでなくスタックポインタも疑う必要があります。
No.2
- 回答日時:
スタックの初期化などはされませんので不定の値です。
変数も初期値のないものは全て不定です。グローバル、ローカルの区別無しに。
>目的は、スタック領域でメモリ障害の場合動作が変わってしまうのか、確認したいためです。
意図がよくわかりませんが。メモリ障害の箇所にアクセスしたら例外発生でしょうね。
No.1
- 回答日時:
言語が不明なので C と想定する.
「スタックメモリ」なるものは規格にはありませんので, 「スタックメモリが初期化されるかどうか」ももちろん決まっていません.
「スタックメモリ」を使う多くの処理系で初期化子を指定しない場合は初期化しないと思いますが, その辺は上に書いたように規格で決まっていることではないので処理系に聞いてください.
あと, 「初期化」と「NULL に設定」とは違います. もちろん, ポインタでないものを「NULL に設定する」というのはプログラムとして間違ってます.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# sprintf()の使い方について 1 2022/08/17 16:16
- その他(学校・勉強) この中で間違ってある説明はありますか?詳しい方に教えていただきたいです。 A. 1つのプログラムが複 2 2023/07/14 01:15
- モニター・ディスプレイ PCゲームで急にFPSが落ちました 2 2022/11/18 00:42
- デスクトップパソコン ん~…分からん 7 2022/06/10 10:47
- USBメモリー・SDカード・フラッシュメモリー 銀行が振込データの受け渡しに未だにFDを使っている理由は「FDDがAドライブ固定だから」って本当? 11 2022/06/02 03:53
- デスクトップパソコン gpu使用率について 1 2022/11/03 18:49
- その他(プログラミング・Web制作) プログラムの起動、利用について、使用期間を設定する方法 3 2023/08/06 21:03
- ビデオカード・サウンドカード 特定のゲームに対して特定のGPUが使われない問題 4 2022/12/15 09:29
- CPU・メモリ・マザーボード Windows11アップデート後の不具合(メモリ不足)について 9 2023/01/04 11:34
- カスタマイズ(車) 自動車の亀の子スタックを引っ張り出すには何トンぐらいのけん引力が要りますか? 3 2022/12/25 10:31
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAの配列サイズとメモリに関して
-
C言語で、メモリを解放しないで...
-
メモリ不足
-
32Bit WindowsXP用アプリでメモ...
-
C言語における再帰呼び出しの...
-
「memcpy」と「strcpy」について
-
EXCEL-VBAにてADOのレコードセ...
-
「ヒープサイズの設定」て何?
-
C言語でのコマンドライン引数...
-
mmap()
-
スタックメモリについて
-
メモリの解放の仕方
-
CPUやメモリの使用率を調べ...
-
ReadEventLogについて
-
[ちょっと息抜き]メモリを解放 ...
-
ルネサスマイコン(R8C) ビルド...
-
メモリが不足しています(VBA)
-
メモリのセグメント違反の解決...
-
動的確保できるメモリ容量
-
エクセル キャッシュメモリー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語で、メモリを解放しないで...
-
VBAの配列サイズとメモリに関して
-
ファイルマッピング関数で失敗
-
メモリのセグメント違反の解決...
-
「ヒープサイズの設定」て何?
-
メモリが不足しています(VBA)
-
エクセルのメモリ使用状況/Appl...
-
メモリ不足
-
大容量のメモリ確保をスワップ...
-
【C言語】再帰が時間がかかる...
-
C言語における再帰呼び出しの...
-
「memcpy」と「strcpy」について
-
バッチファイルでの実行EXEのメ...
-
C言語初心者です。debug assert...
-
エクセルVBA 大容量CSVファイル...
-
これて逆じゃないですか?
-
メモリを解放しないとどうなる?
-
[ちょっと息抜き]メモリを解放 ...
-
動的メモリとexit(C言語)
-
メモリの消費量について
おすすめ情報