1. ホーム
  2. c

[解決済み] 文字列リテラル。どこに行くのか?

2022-05-07 17:17:44

質問

文字列リテラルがどこに割り当てられ、格納されるかに興味があります。

一つ興味深い回答がありました。 こちら と言っている。

インラインで文字列を定義すると、実際にはプログラム自体にデータが埋め込まれ、変更できなくなります(一部のコンパイラは巧妙なトリックでこれを許可していますが、気にしないでください)。

しかし、それはC++に関係することで、気にする必要はないと書いてあるのは言うまでもありません。

悩んでるよ =D

そこで質問ですが、私の文字列リテラルはどこに、どのように保存されているのでしょうか?なぜそれを変更しようとしない方がいいのでしょうか?プラットフォームによって実装が異なるのでしょうか?どなたか、quot;smart trick?"について詳しく教えていただけませんか。

解決方法は?

一般的な手法として、文字列リテラルを "読み取り専用データ" セクションに置き、読み取り専用としてプロセス空間にマッピングします(そのため、変更することができないのです)。

プラットフォームによって異なります。 例えば、シンプルなチップアーキテクチャでは、読み取り専用のメモリセグメントがサポートされていないため、データセグメントは書き込み可能なものとなります。

文字列リテラルを変更可能にするトリックを考え出すよりも(プラットフォームに大きく依存し、時間の経過とともに変更される可能性があります)、単に配列を使用することです。

char foo[] = "...";

コンパイラは、リテラルから配列が初期化されるように手配し、あなたは配列を変更することができます。