[問題] 請問c++的string有限制最長的長度嗎?

看板C_and_CPP作者時間14年前 (2010/06/27 23:24), 編輯推噓1(1022)
留言23則, 7人參與, 最新討論串1/1
遇到的問題: (題意請描述清楚) 請問c++的string有沒有限制最長的長度? 也就是假如我一直做str+="?????....."的動作好多好多次的話(甚至億次) str會爆掉嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.208.162

06/27 23:27, , 1F
你有無限大的記憶體嗎...XD
06/27 23:27, 1F

06/27 23:27, , 2F
到記憶體爆掉吧?
06/27 23:27, 2F

06/27 23:49, , 3F
size_type max_size() const
06/27 23:49, 3F

06/27 23:57, , 4F
32-bit 系統通常大概 1G 左右,64-bit 系統可以超大。
06/27 23:57, 4F

06/27 23:57, , 5F
因為 32-bit 的 process 記憶體最大使用量綁在 2G。
06/27 23:57, 5F

06/28 00:05, , 6F
那T大怎麼會說大概1G左右呢? 不是應該二G嗎 這是OS定義的嗎
06/28 00:05, 6F

06/28 00:29, , 7F
不曉得string是否保證儲存字串在連續記憶體空間, 有的話
06/28 00:29, 7F

06/28 00:30, , 8F
要能確保有連續1G的vir addr space可能也有難度說@_@"
06/28 00:30, 8F

06/28 01:36, , 9F
設計的人多少會預留一些空間給 process 其它資源用吧。
06/28 01:36, 9F

06/28 01:37, , 10F
不太可能有 2G 能用就把 max 定在 2G 不考慮別的東西。
06/28 01:37, 10F

06/28 01:41, , 11F
我印象中有人討論過 string 要預留一倍的空間是考慮到
06/28 01:41, 11F

06/28 01:41, , 12F
某些操作需要兩倍字串長度的記憶體空間才能完成。
06/28 01:41, 12F

06/28 01:44, , 13F
至於 string 是否要求連續空間,我確定是不用。
06/28 01:44, 13F

06/28 01:45, , 14F
vector 倒是在 C++ 第一次修訂就有明確寫說要是連續。
06/28 01:45, 14F

06/28 01:49, , 15F
所以有時看到一些寫網路程式的人,send() 送 &str[0] 和
06/28 01:49, 15F

06/28 01:50, , 16F
str.length() 這樣傳,其實都是在找死。
06/28 01:50, 16F

06/28 01:50, , 17F
我還以為string是連續的...那麼c_str()其實有複製的動作?
06/28 01:50, 17F

06/28 01:55, , 18F
c_str() 時間複雜度是 O(n),實作上幾乎也都有複製動作。
06/28 01:55, 18F

06/28 01:56, , 19F
因為 std::string 實作上幾乎不存結尾那個 null。
06/28 01:56, 19F

06/28 01:58, , 20F
應該說早期實作上,因為現在確實有一些實作品不用複製。
06/28 01:58, 20F

06/28 01:59, , 21F
而且聽說在下一版 C++ 有把 std::string 改成連續空間的
06/28 01:59, 21F

06/28 01:59, , 22F
傾向,因為目前似乎找不到不是連續空間的實作品 XD
06/28 01:59, 22F

06/28 10:46, , 23F
http://tcirc.org/MhFyG //看到原PO的文想到這個
06/28 10:46, 23F
文章代碼(AID): #1C9sqMZx (C_and_CPP)