我知道程序中使用的字符串文字会存储在只读区域中,例如。
//global
const char *s="Hello World \n";
这里字符串文字 "Hello World\n" 存储在 program 的只读区域中。现在假设我在某些函数的主体中声明了一些文字,例如
func1(char *name)
{
const char *s="Hello World\n";
}
由于函数的局部变量存储在该函数的激活记录中,字符串文字也是如此吗?再次假设我从某个函数 func2 调用 func1 作为
func2()
{
//code
char *s="Mary\n";
//call1
func1(s);
//call2
func1("Charles");
//code
}
在上面,在第一次从 func2 调用 func1 时,传递了“s”的起始地址,即 s[0] 的地址,而在第二次调用中,我不确定实际发生了什么。字符串文字“Charles”在哪里获得存储空间。编译器是否创建了一些temporory并且它的地址被传递或发生了其他事情?我发现文字在字符串文字的“只读数据”部分中存储 :它们去哪儿了? 但我不清楚这是否只发生在全局文字或某些函数的本地文字上。任何见解都将是可观的。谢谢你。