3 回答

TA貢獻1865條經驗 獲得超7個贊
創(chuàng)建它的地方是編譯器編寫器的實現(xiàn)決定,真的。最有可能的是,字符串文本將存儲在內存的只讀段中,因為它們從不更改。
在過去的編譯器時代,您曾經擁有像這些文字一樣的靜態(tài)數(shù)據,以及全局但可變的數(shù)據。這些數(shù)據存儲在文本(代碼)段和數(shù)據(初始化數(shù)據)段中。
即使你有這樣的代碼char *x = "hello";,hello字符串本身存儲在只讀內存中,而變量則存儲在只讀內存中。x在堆棧上(如果是全局的,則在可寫內存中的其他地方)。x只需設置為hello繩子。這允許各種棘手的事情,如字符串折疊,以便“無效選項”(0x1000)和“有效選項”(0x1002)可以使用相同的內存塊,如下所示:
+-> plus:0 1 2 3 4 5 6 7 8 9 A B C D E
| +---+---+---+---+---+---+---+---+---+---+---+---+---+---+----+
0x1000 | i | n | v | a | l | i | d | | o | p | t | i | o | n | \0 |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+----+
記住,我并不是指只讀存儲器,而是專用于存儲不可更改的東西的內存(操作系統(tǒng)可能會將其標記為只讀)。
它們也從未被摧毀,直到main()出口。

TA貢獻1866條經驗 獲得超5個贊
一個普通的字符串文字具有類型為“數(shù)組的n個字符”和靜態(tài)存儲時間。
這些對象的存儲應在程序期間持續(xù)。

TA貢獻1840條經驗 獲得超5個贊
好吧.。是。它們是必須的;組成每個字符串中的字符序列的信息必須在某個地方。如果要動態(tài)分配它們,然后進行初始化,用于初始化的信息將駐留在哪里?因此,簡單地使字符串保持靜態(tài)是更有效的,這樣一旦程序完成加載,它們就始終是可用的和有效的。
- 3 回答
- 0 關注
- 332 瀏覽
添加回答
舉報