我最近一直在使用Objective-C,並且來自C++世界,我沒有明確指出本地Objective-C集合的容量。在C++中,容器可以用對象或引用類型(例如引用包裝器或指針)填充,因此指定初始容量是有意義的,因爲爲一系列對象預先分配內存可以是性能大大提高。但是,在Objective-C中,集合只能包含對動態分配對象(即指針)的引用。因此,我想知道指定容量的性能優勢是什麼,如果在最壞的情況下只有指針集合的大小超過原始容量時才需要複製指針。Objective-C中的收集容量的要點是什麼?
很明顯,我對內存模型的理解還很缺乏,所以我錯過了什麼?
是的,Objective-C的效果比C++的效果要小,因爲它只是指針。但是由於調整大小會影響性能關鍵代碼(如長循環)的性能,因此仍然存在不必要的內存分配/釋放/碎片/複製。 – fluidsonic 2014-10-01 01:16:58
你可能是對的。這是一個小的優化,因爲如果集合需要變得更大,realloc和memcpy只是指針而不是對象。 – rmaddy 2014-10-01 01:17:16
我懷疑指定初始容量的能力主要是因爲一些人認爲它有一些好處並要求它。 – 2014-10-01 01:21:27