最初の質問に対する答えは、"hello world" は読み取り専用メモリ領域に保存されるということです。
2 番目の質問の答えは、そうかもしれないし、そうでないかもしれないということです。同じ住所である保証はありません。
以下の詳細情報:
初期化されたデータ セグメント:
初期化されたデータ セグメント。通常は単にデータ セグメントと呼ばれます。データ セグメントは、プログラムの仮想アドレス空間の一部であり、プログラマによって初期化されるグローバル変数と静的変数が含まれています。
変数の値は実行時に変更できるため、データセグメントは読み取り専用ではないことに注意してください。
このセグメントは、初期化された読み取り専用領域と初期化された読み取り/書き込み領域にさらに分類できます。
たとえば、C の char s[] = “hello world” で定義されたグローバル文字列と、メイン (つまりグローバル) の外にある int debug=1 のような C ステートメントは、初期化された読み取り/書き込み領域に格納されます。const char* string = “hello world” のようなグローバル C ステートメントは、文字列リテラル “hello world” を初期化された読み取り専用領域に格納し、文字ポインター変数 string を初期化された読み書き領域に格納します。
例: static int i = 10 はデータ セグメントに格納され、global int i = 10 もデータ セグメントに格納されます
初期化されていないデータ セグメント:
「bss」セグメントと呼ばれることが多い初期化されていないデータ セグメントで、「シンボルで始まるブロック」を表す古代のアセンブラ オペレータにちなんで名付けられました。このセグメントのデータは、プログラムが実行を開始する前に、カーネルによって算術 0 に初期化されます。
初期化されていないデータは、データ セグメントの最後から始まり、ゼロに初期化されているか、ソース コードで明示的に初期化されていないすべてのグローバル変数と静的変数を含みます。
たとえば、変数は static int i; と宣言されています。BSS セグメントに含まれます。たとえば、int j; と宣言されたグローバル変数。BSS セグメントに含まれます。