3 回答

TA貢獻1848條經驗 獲得超2個贊
創建它的地方是編譯器編寫器的實現決定,真的。最有可能的是,字符串文本將存儲在內存的只讀段中,因為它們從不更改。
在過去的編譯器時代,您曾經擁有像這些文字一樣的靜態數據,以及全局但可變的數據。這些數據存儲在文本(代碼)段和數據(初始化數據)段中。
即使你有這樣的代碼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 |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+----+
記住,我并不是指只讀存儲器,而是專用于存儲不可更改的東西的內存(操作系統可能會將其標記為只讀)。
它們也從未被摧毀,直到main()出口。

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

TA貢獻1735條經驗 獲得超5個贊
- 3 回答
- 0 關注
- 365 瀏覽
添加回答
舉報