2011-10-30 6 views
7

私たちは時にはこのタイプのコードをCプログラミングで使用します。定数の文字列はどこに格納されますか?

char *p = "Sam"; 

ここで、定数文字列 "Sam"のアドレスは、charポインタpに格納されます。今ここに
サムがどこに保管されるのか尋ねたいですか?

+0

可能な複製[Cには定数変数はどこに格納されていますか?](http://stackoverflow.com/questions/1576489/where-are-constant-variables-stored-in-c) –

+0

@BrianRoach文字列リテラルは定数変数ではありません。 –

答えて

9

標準ではこれが指定されていません。通常、文字列リテラル("Sam")は、データセクションの読み取り専用ページに格納されます。

p自体は、自動か静的かによって異なります。

+0

自動とグローバルが保存されていますか? –

+2

@ Mr.32自動変数はスタックに格納されます。 "グローバル"変数または静的変数は 'data'(またはおそらく' bss')に格納されます。 – cnicutar

+1

'data'セクションの読み込み専用ページはどのアーキテクチャにありますか? Linux/ELFでは、文字列リテラルは 'textata 'と同じセグメントにある' rodata'セクションに他の読み取り専用非コードデータとともに格納されます。 –

8

文字列 "Sam"は、通常、グローバル定数と同じ領域内のグローバルメモリに格納されます。あなたはこのなかった場合

しかし、:

char p[] = "Sam"; 

をそれからそれは代わりにスタックになります。 (配列の初期化子として)

関連する問題