对于您的第一个问题,答案是,“hello world”将存储在只读内存区域中。
对于您的第二个问题,答案是它可能会或可能不会。不能保证它们具有相同的地址。
下面还有一些信息:
初始化数据段:
初始化数据段,通常简称为Data Segment。数据段是程序虚拟地址空间的一部分,其中包含由程序员初始化的全局变量和静态变量。
请注意,数据段不是只读的,因为变量的值可以在运行时更改。
该段可以进一步分为初始化只读区和初始化读写区。
例如,由 C 中的 char s[] = “hello world” 定义的全局字符串和 main 之外的诸如 int debug=1 的 C 语句(即全局)将存储在初始化的读写区域中。而像 const char* string = “hello world” 这样的全局 C 语句使字符串文字“hello world”存储在初始化的只读区域中,而字符指针变量 string 则存储在初始化的读写区域中。
例如:静态 int i = 10 将存储在数据段中,全局 int i = 10 也将存储在数据段中
未初始化的数据段:
未初始化的数据段,通常称为“bss”段,以一个古老的汇编运算符命名,代表“由符号开始的块”。该段中的数据在程序开始执行前被内核初始化为算术0
未初始化的数据从数据段的末尾开始,包含所有初始化为零或在源代码中没有显式初始化的全局变量和静态变量。
例如一个变量声明为 static int i; 将包含在 BSS 段中。例如一个全局变量声明为 int j; 将包含在 BSS 段中。