是否有任何已知的僅用於頭文件的類STL容器/分配器,用於將內存塊添加到另一個連續內存區域,直到填充完畢爲止?目前我使用的是std::vector<char> vec
,因爲它有一些有用的界面,但它不是最佳的,我認爲我濫用了它來滿足我的需求。將大塊內存追加到連續內存區域的良好容器
予先用std::vector::reserve
以固定其容量和分配所需存儲器一勞永逸以避免不必要的重新分配,然後使用每個時間std::copy(&chunk[0], &chunk[size], vec.data() + vec.size())
到的存儲器中的新塊附加到矢量後面的unfilled
存儲器區域(當然size() <= capacity()
)。每次複製後,我都相應地顯式更新矢量的大小。好的,我可以使用back_inserter。但是這不是現在的觀點(見下文)。
當然std::copy
可以通過任何實現專門爲char
,以便它可以在最後調用memcpy
,但這不是保證。我自己調用memcpy
可以將塊追加到已經由vector分配的內存中,以保證這樣的保證是醜陋的。有更好/更優雅的選擇嗎?
編輯:我沒有控制如何分配內存塊。他們得到。
我會說堅持用'vector',直到你毫無疑問證明這不如手卷'memcpy'解決方案,然後*然後*將它封裝到C++構造中。 –
你看到這個:http://stackoverflow.com/questions/3482941/how-do-you-realloc-in-c – 0x90
爲什麼不使用char數組? – Dariusz