私たちは時にはこのタイプのコードをCプログラミングで使用します。定数の文字列はどこに格納されますか?
char *p = "Sam";
ここで、定数文字列 "Sam"のアドレスは、charポインタpに格納されます。今ここに
サムがどこに保管されるのか尋ねたいですか?
私たちは時にはこのタイプのコードをCプログラミングで使用します。定数の文字列はどこに格納されますか?
char *p = "Sam";
ここで、定数文字列 "Sam"のアドレスは、charポインタpに格納されます。今ここに
サムがどこに保管されるのか尋ねたいですか?
標準ではこれが指定されていません。通常、文字列リテラル("Sam"
)は、データセクションの読み取り専用ページに格納されます。
p
自体は、自動か静的かによって異なります。
自動とグローバルが保存されていますか? –
@ Mr.32自動変数はスタックに格納されます。 "グローバル"変数または静的変数は 'data'(またはおそらく' bss')に格納されます。 – cnicutar
'data'セクションの読み込み専用ページはどのアーキテクチャにありますか? Linux/ELFでは、文字列リテラルは 'textata 'と同じセグメントにある' rodata'セクションに他の読み取り専用非コードデータとともに格納されます。 –
文字列 "Sam"は、通常、グローバル定数と同じ領域内のグローバルメモリに格納されます。あなたはこのなかった場合
しかし、:
char p[] = "Sam";
をそれからそれは代わりにスタックになります。 (配列の初期化子として)
可能な複製[Cには定数変数はどこに格納されていますか?](http://stackoverflow.com/questions/1576489/where-are-constant-variables-stored-in-c) –
@BrianRoach文字列リテラルは定数変数ではありません。 –