如果按2倍擴容,第n次擴容需要的空間恰好比前n-1擴容要求的空間總和要大,那麼即使在前n-1次分配空間都是連續排列的最好情況下,他們留下的空間也不足以分配給此次擴容。
理想分配方案是是在第n次resize()的時候能復用之前n-1次釋放的記憶體,但選擇兩倍的增長比如像這樣:
1,2,4,8,16,32,...可以看到到第三次resize(4)的時候,前面釋放的總和只有1+2=3,到第四次resize(8)的時候前面釋放的總和只有1+2+4=7,每次需要申請的空間都無法用到前面釋放的記憶體。
這樣對cache和mmu都不夠友好。
vector 1 5倍擴容優於2倍擴容的原因
假設我們一開始申請了 16byte 的空間。當需要更多空間的時候,將首先申請 32byte,然後釋放掉之前的 16byte。這釋放掉的16byte 的空間就閒置在了記憶體中。當還需要更多空間的時候,你將首先申請 64byte,然後釋放掉之前的 32byte。這將在記憶體中留下乙個48byte 的閒置...
vector 擴容為什麼要以1 5倍或者2倍擴容
我們知道,vector 在需要的時候會擴容,在 vs 下是 1.5倍,在 gcc 下是 2 倍。那麼會產生兩個問題 1 為什麼是成倍增長,而不是每次增長乙個固定大小的容量呢?2 為什麼是以 2 倍或者 1.5 倍增長,而不是以 3 倍或者 4 倍等增長呢?1 第乙個問題 如果已成倍方式增長。假定有 ...
我是這樣賺15倍的
我是這樣賺15倍的 很多人要來向我索取 絕招,我其實也沒有絕招!我現在把一些心得寫在這裡和大家交流。1,我先研究自己的資金,時間。年齡等因素,把操作週期制定為 波段操作 2,然後根據操作週期選擇使用工具 圖表,macd指標。趨勢 我用20日線來判斷 只要20日線連續三天向上走 站在 上面 我就看多!...