字符串引用是否重复?

时间:2012-02-08 21:40:21

标签: c string optimization gcc

  

可能重复:
  C/C++: Optimization of pointers to string constants

假设您在很多地方定义了字符串"example"

// module1.h
char *x = "example";
// module2.h
char *a[] = { "text", "example" };
// module3.c
printf("example");
//etc.

这些数据会重复还是编译器只会对它进行一次引用?

3 个答案:

答案 0 :(得分:8)

它取决于实现。但这就是字符串文字的不可变属性的精神。

引用字符串文字的C99基本原理:

  

“字符串文字不需要是可修改的。此规范允许实现共享具有相同文本的字符串的副本,将字符串文字放在只读内存中,并执行某些优化”< / p>

答案 1 :(得分:2)

这是一个“实施细节”。这意味着一些智能编译器会将字符串统一在内存中,而其他编译器则会生成单独的副本。

最后,有些编译器会使用某些编译器选项和其他选项做其他事情......

答案 2 :(得分:0)

这是一个实现细节,编译器编写者可以随心所欲地执行它。许多编译器都有一个开关来控制重复的字符串常量是否引用相同的地址。