2012-02-08 53 views
5

可能重複:
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. 

請問這個數據將被複制或將編譯器品牌只有一個參考?

+0

取決於編譯器/鏈接器和選項。 我相信整個程序優化和智能鏈接器將結合重複,但不記得參考資料。 – JimR 2012-02-08 21:42:14

回答

8

它是依賴於實現。但這是字符串文字不可變屬性的精神。

從C99理由上字符串文字引用:

「字符串文字不需要是可修改的該規範允許實現具有相同的文本共享串的副本,以放置在讀取字符串文字。 - 僅限內存,並執行某些優化「

0

這是一個實現細節,編譯器編寫者可以自由地以任何他們想要的方式執行它。許多編譯器都有一個開關來控制重複的字符串常量是否指向相同的地址。

2

這是一個「實現細節」。這意味着一些智能編譯器會將內存中的字符串統一起來,而其他的則會分離出不同的副本。

最後,一些編譯器會做一兩件事一定的編譯器選項和其他的東西與其他選項...

+0

這不是*實現定義*,因爲實現不需要記錄此實現細節(根據實現定義的行爲所需),但當然這取決於實現。 – ouah 2012-02-08 21:49:26

+0

@ouah換句話說,它被記錄爲無證件;-) – Neil 2012-02-08 21:54:03

+0

@ouah - 微妙的細節和良好的說明。編輯答案以避免混淆。 – rodrigo 2012-02-08 22:12:50

相關問題