我有一個關於在C++中使用的向量的問題。我知道與數組不同,向量沒有限制。我有一個有600萬頂點的圖,我正在使用類的向量。當我嘗試向節點中插入節點時,它說失敗的內存分配失敗。因爲它可以完美地運行超過200萬個節點。我知道不好的分配意味着它由於我在我的代碼中使用的指針而失敗,但對我來說似乎並不是這樣。我的問題是,由於矢量的限制增加,由於圖的大尺寸,它可能失敗。如果有任何方法,我們可以增加該限制。在C++中限制向量
1
A
回答
1
有std::vector::max_size
,您可以使用它來查看您聲明的矢量可能容納的元素的最大數量。
返回最大尺寸
返回的 載體可以容納的元素的最大數量。
這是最大的潛在規模的容器可以達到由於 已知的系統或庫實施限制,但容器 是沒有保證能夠達到這個規模手段:它仍然可以 失敗在達到該大小之前的任何時間點分配存儲空間。
3
首先,您應該驗證單個元素需要多少內存。一個頂點/節點的大小是多少? (您可以通過使用sizeof
運算符來驗證)。考慮如果答案是50字節,則需要50個字節乘以600萬個頂點= 300兆字節。
然後,考慮下一個問題:在一個向量中,內存必須是連續的。這意味着你的程序會要求操作系統給它一個300 MB的連續塊,並且不能保證這個塊可用,即使可用內存超過300 MB。您可能必須拆分數據,或者選擇另一個不連續的容器。內存碎片是不可能控制的,這意味着如果你運行你的程序並且它工作正常,也許你再次運行它並且它不起作用(反之亦然)。
另一種可能的方法是手動調整矢量大小,而不是讓它自動選擇新的大小。該向量試圖預測未來的一些增長,所以如果它需要增長,它會嘗試分配更多的容量。這種額外的容量可能是有足夠的內存和沒有足夠的內存之間的差異。你可以使用std::vector::reserve
來實現這一點,儘管我認爲確切的行爲是依賴於實現的 - 它可能仍然決定保留超過你請求的數量。
您還有一個選擇是優化您使用的數據類型。例如,如果在頂點類中使用32位整數,而只需要16位,則可以使用int16_t
,這將佔用一半的空間。請參閱CPP Reference的固定大小變量的完整列表。
相關問題
- 1. 限制C++中向量的增長
- 2. 限制向量中元素的數量
- 3. 限制stl的向量max_size
- 4. 如何限制解向量中的值?
- 5. 如何在C++中製作多向量
- 6. 限制在C#
- 7. C#中Win表單的數量限制
- 8. C中的CPU數量限制
- 9. C++複製多維向量
- 10. 如何限制C++ STL向量元素的範圍?
- 11. 在c#中限制程序集權限#
- 12. 向量在C++
- 13. 的R - 大數據 - 向量超過向量長度的限制
- 14. 限制R svm package e1071中支持向量的數量?
- 15. 在C++中使用向量
- 16. 在向量中找到C++
- 17. C++:在向量中搜索
- 18. 在C++向量中插入
- 19. cin向C++中的向量
- 20. 在子視圖中限制橫向:iPad
- 21. 在C++中使用向量矢量「unique()」
- 22. C++中的向量通用向量
- 23. C++向量中動態分配向量?
- 24. 非volatile變量限制使用C
- 25. C++中限制靜態變量的數量
- 26. 限制的財產分配給一組在C#中的常量
- 27. 如何限制最初在d3中的節點數量強制定向圖
- 28. C++/CX - 向量的向量?
- 29. C++:向量問題向量
- 30. 限制數量
對於64位編譯器使用64位系統,並且您的限制實際上會消失。當然,如果您嘗試使用比系統中安裝的內存多的內存,事情會顯着減慢。 –
你能告訴我們你正在使用哪些代碼將項目添加到向量中,特別是引發異常的部分? – Xirema
檢查'std :: vector :: max_size()' –