可能是重复的问题:
C/C++: 优化指向字符串常量的指针
假设您在许多地方都定义了字符串"example"
// module1.h
char *x = "example";
// module2.h
char *a[] = { "text", "example" };
// module3.c
printf("example");
//etc.
这些数据会被复制还是编译器只会对其进行一次引用?
可能是重复的问题:
C/C++: 优化指向字符串常量的指针
假设您在许多地方都定义了字符串"example"
// module1.h
char *x = "example";
// module2.h
char *a[] = { "text", "example" };
// module3.c
printf("example");
//etc.
这取决于具体的实现。但这正是字符串字面值不可变属性的精神所在。
引用 C99 对字符串字面值的解释:
“字符串字面值并不要求可修改。 此规范允许实现共享相同文本的字符串副本,将字符串字面值放置在只读内存中,并执行某些优化。”
这是一个“实现细节”。这意味着一些聪明的编译器会在内存中统一字符串,而其他编译器则会制作分离的副本。
最后,一些编译器将使用某些编译器选项执行一项操作,而使用其他选项执行其他操作...
那是一個實現細節,編譯器的作者可以任意選擇實現方式。許多編譯器都有一個開關用於控制是否將重複的字符串常量指向同一地址。