メモリがデータ、ヒープ、スタック、コードの 4 つのセグメントに分割されていることを考慮すると、グローバル変数、静的変数、定数データ型、ローカル変数 (関数内で定義および宣言)、変数 (メイン関数内)、ポインター、動的に割り当てられたスペース (malloc および calloc を使用) はメモリのどこに保存されるのでしょうか。
以下のように割り当てられると思います。
- グローバル変数 -------> データ
- 静的変数 -------> データ
- 定数データ型 -----> コード
- ローカル変数(関数内で宣言および定義) --------> スタック
- メイン関数で宣言および定義された変数 -----> ヒープ
- ポインタ(例えば、
char *arr
)int *arr
--------> ヒープ - 動的に割り当てられたスペース(mallocとcallocを使用)---------> スタック
これらの変数については、C の観点からのみ言及しています。
私は C 初心者なので、間違っていたら訂正してください。
ベストアンサー1
これらのうちいくつかは正解でしたが、質問を書いた人は少なくとも 1 つの質問であなたを騙しました。
- グローバル変数 -------> データ (正しい)
- 静的変数 -------> データ (正しい)
- 定数データ型 -----> コードおよび/またはデータ。定数自体がデータセグメントに格納され、その参照がコードに埋め込まれる状況では、文字列リテラルを検討してください。
- ローカル変数(関数内で宣言および定義) --------> スタック(正解)
- 関数内で宣言および定義された変数
main
----->ヒープもスタックします (先生はあなたを騙そうとしていました) - ポインタ (例:
char *arr
、int *arr
) -------> コンテキストに応じてヒープstatic
データまたはスタック。C では、グローバルまたはポインタを宣言できます。その場合、ポインタ自体はデータ セグメントに配置されます。 - 動的に割り当てられたスペース(
malloc
、、calloc
を使用realloc
)--------->スタックヒープ
「スタック」は正式には「自動ストレージクラス」と呼ばれていることに言及する価値があります。