作者dixonhsiao ()
看板C_and_CPP
標題[問題] 請問c++的string有限制最長的長度嗎?
時間Sun Jun 27 23:24:03 2010
遇到的問題: (題意請描述清楚) 請問c++的string有沒有限制最長的長度?
也就是假如我一直做str+="?????....."的動作好多好多次的話(甚至億次)
str會爆掉嗎?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.208.162
→ james732:你有無限大的記憶體嗎...XD 06/27 23:27
→ kao50126:到記憶體爆掉吧? 06/27 23:27
→ jlovet:size_type max_size() const 06/27 23:49
→ tinlans:32-bit 系統通常大概 1G 左右,64-bit 系統可以超大。 06/27 23:57
→ tinlans:因為 32-bit 的 process 記憶體最大使用量綁在 2G。 06/27 23:57
推 QQ29:那T大怎麼會說大概1G左右呢? 不是應該二G嗎 這是OS定義的嗎 06/28 00:05
→ VictorTom:不曉得string是否保證儲存字串在連續記憶體空間, 有的話 06/28 00:29
→ VictorTom:要能確保有連續1G的vir addr space可能也有難度說@_@" 06/28 00:30
→ tinlans:設計的人多少會預留一些空間給 process 其它資源用吧。 06/28 01:36
→ tinlans:不太可能有 2G 能用就把 max 定在 2G 不考慮別的東西。 06/28 01:37
→ tinlans:我印象中有人討論過 string 要預留一倍的空間是考慮到 06/28 01:41
→ tinlans:某些操作需要兩倍字串長度的記憶體空間才能完成。 06/28 01:41
→ tinlans:至於 string 是否要求連續空間,我確定是不用。 06/28 01:44
→ tinlans:vector 倒是在 C++ 第一次修訂就有明確寫說要是連續。 06/28 01:45
→ tinlans:所以有時看到一些寫網路程式的人,send() 送 &str[0] 和 06/28 01:49
→ tinlans:str.length() 這樣傳,其實都是在找死。 06/28 01:50
→ james732:我還以為string是連續的...那麼c_str()其實有複製的動作? 06/28 01:50
→ tinlans:c_str() 時間複雜度是 O(n),實作上幾乎也都有複製動作。 06/28 01:55
→ tinlans:因為 std::string 實作上幾乎不存結尾那個 null。 06/28 01:56
→ tinlans:應該說早期實作上,因為現在確實有一些實作品不用複製。 06/28 01:58
→ tinlans:而且聽說在下一版 C++ 有把 std::string 改成連續空間的 06/28 01:59
→ tinlans:傾向,因為目前似乎找不到不是連續空間的實作品 XD 06/28 01:59