3 回答

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超2個(gè)贊
創(chuàng)建它的地方是編譯器編寫器的實(shí)現(xiàn)決定,真的。最有可能的是,字符串文本將存儲(chǔ)在內(nèi)存的只讀段中,因?yàn)樗鼈儚牟桓摹?/p>
在過(guò)去的編譯器時(shí)代,您曾經(jīng)擁有像這些文字一樣的靜態(tài)數(shù)據(jù),以及全局但可變的數(shù)據(jù)。這些數(shù)據(jù)存儲(chǔ)在文本(代碼)段和數(shù)據(jù)(初始化數(shù)據(jù))段中。
即使你有這樣的代碼char *x = "hello";,hello字符串本身存儲(chǔ)在只讀內(nèi)存中,而變量則存儲(chǔ)在只讀內(nèi)存中。x在堆棧上(如果是全局的,則在可寫內(nèi)存中的其他地方)。x只需設(shè)置為hello繩子。這允許各種棘手的事情,如字符串折疊,以便“無(wú)效選項(xiàng)”(0x1000)和“有效選項(xiàng)”(0x1002)可以使用相同的內(nèi)存塊,如下所示:
+-> 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 |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+----+
記住,我并不是指只讀存儲(chǔ)器,而是專用于存儲(chǔ)不可更改的東西的內(nèi)存(操作系統(tǒng)可能會(huì)將其標(biāo)記為只讀)。
它們也從未被摧毀,直到main()出口。

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊
一個(gè)普通的字符串文字具有類型為“數(shù)組的n個(gè)字符”和靜態(tài)存儲(chǔ)時(shí)間。
這些對(duì)象的存儲(chǔ)應(yīng)在程序期間持續(xù)。

TA貢獻(xiàn)1735條經(jīng)驗(yàn) 獲得超5個(gè)贊
- 3 回答
- 0 關(guān)注
- 363 瀏覽
添加回答
舉報(bào)