2014-02-26 45 views
2

一個向量應該動態增長,並有一個連續的內存位置,通過使用operator new分配器類獲得。我的問題是,有多少內存沒有默認向量(當我們沒有指定一個預留大小)默認情況下使用new進行分配,因此它可以隨後增長和添加元素。默認向量內存大小

+0

爲什麼不使用'sizeof()'? –

+2

@RikayanBandyopadhyay因爲'sizeof()'會告訴你'vector '類型是多大;它不會告訴你它爲存儲預留了多少空間。 – alastair

+1

您可以檢查vector.capacity()的輸出以查找未使用的矢量,然後將其與元素的大小相乘。 – dutt

回答

2

這取決於實施,你無法知道。實際上,即使您指定了要保留的大小,實現仍然可以自由保留,不管它多麼令人滿意(大小隻是一個提示,AFAIK)。

+0

AFAIK,這是錯誤的。 reserve()具有可觀察的後置條件,下一次調用capacity()會得到相等或更大的值。只需在這裏檢查:http://www.gotw.ca/gotw/074.htm(「...調用reserve()將保證向量的容量()至少爲2」)。 –

+0

@ChristianHackl我不明白爲什麼'vector'實現必須在這個時候分配任何內存,不管它從'capacity()'返回。例如,它可能會選擇推遲分配,直到試圖訪問內存爲止。它也可以選擇返回一個比傳遞給reserve()更大但小於實際分配的數字(不確定爲什麼你想要,但我不明白爲什麼它不會)。 – alastair

+0

說實話,我不知道標準的措辭是否真的會允許這樣做。像這樣的技術(即處理容量和儲備中的抽象值)是否能夠從實施質量的POV中獲得意義呢? –