當我看着std :: string在gcc中實現的方式時,我注意到sizeof(std :: string)正好等於指針的大小(4字節x32構建和x64的8個字節)。由於字符串應該持有一個指向字符串緩衝區的指針和它的長度作爲最小值,這讓我認爲GCC中的std :: string對象實際上是一個指向保存這些數據的內部結構的指針。GCC的std ::字符串 - 爲什麼這麼奇怪的執行
因此,當創建新字符串時,應該發生一個動態內存分配(即使字符串爲空)。
除了性能開銷,這也會導致內存開銷(當我們分配非常小的內存時會發生這種情況)。
所以我只看到這種設計的缺點。我錯過了什麼?這些實施的優勢是什麼?首先是什麼原因?
對我自己來說,我通常會發現,編譯器和標準庫編寫者對我們的設計給予了更多的思考,這是一個安全的假設。我只是假設有很好的理由,直到我有一個可能由此造成的特定問題。現在,你可能會出於好奇而問。在這種情況下,我會建議你自己做更多的研究 - 源代碼和它的存儲庫就在那裏:) –
GCC std :: string被實現爲copy-on-write智能指針,指向實際的緩衝區。它是開源的,所以你可以閱讀它。 –
謝謝,Jan,應該自己找到了。請發表回覆,我會接受 –