[爆卦]c語言字串長度是什麼?優點缺點精華區懶人包

為什麼這篇c語言字串長度鄉民發文收入到精華區:因為在c語言字串長度這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者dixonhsiao ()看板C_and_CPP標題[問題] 請問c++的string有限制最長...




遇到的問題: (題意請描述清楚)


請問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
xatier:http://tcirc.org/MhFyG //看到原PO的文想到這個 06/28 10:46

你可能也想看看

搜尋相關網站