在此示例中,在程序的生命周期内,字符串文字“hello”何时被分配和释放?
init(char **s)
{
*s = "hello";
}
int f()
{
char *s = 0;
init(&s);
printf("%s\n", s);
return 0;
}
字符串文字被编译器初始化到只读内存段中。运行时没有进行初始化或删除。
它们没有被分配,而是存储在可执行文件的 DATA 段中。
假设有一个操作系统,包含字符串文字的内存在操作系统加载可执行文件时被分配,并在操作系统卸载可执行文件时被释放。发生这种情况的具体时间取决于可执行文件的类型(程序、共享库等)和操作系统。