C で変数はメモリのどこに保存されますか? 質問する

C で変数はメモリのどこに保存されますか? 質問する

メモリがデータ、ヒープ、スタック、コードの 4 つのセグメントに分割されていることを考慮すると、グローバル変数、静的変数、定数データ型、ローカル変数 (関数内で定義および宣言)、変数 (メイン関数内)、ポインター、動的に割り当てられたスペース (malloc および calloc を使用) はメモリのどこに保存されるのでしょうか。

以下のように割り当てられると思います。

  • グローバル変数 -------> データ
  • 静的変数 -------> データ
  • 定数データ型 -----> コード
  • ローカル変数(関数内で宣言および定義) --------> スタック
  • メイン関数で宣言および定義された変数 -----> ヒープ
  • ポインタ(例えば、char *arrint *arr--------> ヒープ
  • 動的に割り当てられたスペース(mallocとcallocを使用)---------> スタック

これらの変数については、C の観点からのみ言及しています。

私は C 初心者なので、間違っていたら訂正してください。

ベストアンサー1

これらのうちいくつかは正解でしたが、質問を書いた人は少なくとも 1 つの質問であなたを騙しました。

  • グローバル変数 -------> データ (正しい)
  • 静的変数 -------> データ (正しい)
  • 定数データ型 -----> コードおよび/またはデータ。定数自体がデータセグメントに格納され、その参照がコードに埋め込まれる状況では、文字列リテラルを検討してください。
  • ローカル変数(関数内で宣言および定義) --------> スタック(正解)
  • 関数内で宣言および定義された変数main-----> ヒープ もスタックします (先生はあなたを騙そうとしていました)
  • ポインタ (例: char *arrint *arr) -------> コンテキストに応じて ヒープ staticデータまたはスタック。C では、グローバルまたはポインタを宣言できます。その場合、ポインタ自体はデータ セグメントに配置されます。
  • 動的に割り当てられたスペース(malloc、、callocを使用realloc)---------> スタック ヒープ

「スタック」は正式には「自動ストレージクラス」と呼ばれていることに言及する価値があります。

おすすめ記事