2017-10-15 198 views
0

我正在處理的程序正在執行一些字符串操作,其中包含字的輸出數組將與輸入數組相同或更小。例如,輸入數組包含100個元素,每個元素是一個單詞(變量長度)。操縱之後,只有99個元素。假設輸入數組是500字節。我可以告訴Swift確保輸出數組的長度至少爲500個字節,以便在添加元素時不需要將它們移動到內存的不同部分,而元素多次存在更多空間?在Swift中定義數組容量(以字節數爲單位)

回答

0

可能有一種誤解。 Array存儲某些類型的值T,並且這些值中的每一個都具有相同的大小。在你的情況下,類型爲[String]的數組保存的值爲,其類型爲struct String,其大小固定(如Swift中任何類型的值)。

字符串如何管理在實現細節中保存可變數量的字符。 如果您檢查Swift源代碼,那麼您會看到struct String包含 指向實際字符串存儲的指針(引用計數爲實現 帶拷貝寫入的值語義)。

所以,你可以爲元素給定的號碼預留空間,以避免陣列 再分配時添加的元素:

var words: [String] = [] 
words.reserveCapacity(100) 

您也可以在字符串中的底層存儲預留空間,以避免重新分配 如果字符串擴展:

var word = "" 
word.reserveSpace(1000) 

但你並不在一個陣列保留持有焦炭總數 能力它的字符串元素的字符串。

+0

是的,我意識到我在問題中犯的錯誤是關於固定長度字符而不是可變長度字符串。 Woops。 – traisjames

+0

@traisjames:我認爲你現在在混合不同的東西。該數組存儲'String'類型的元素,這是一個固定長度的結構。每個'String'使用一個(不透明)緩衝區來保存一個(可能變化的)數量的字符。它不是需要容量的總數字符的數組。 –

+0

@Martain R:哦,所以String的內存佔用不限於存儲的字符數量? – traisjames