[英]vector is throwing bad_alloc
我有以下代碼std::bad_alloc
異常:
std::vector<std::vector<double>> myVector(nlines);
for(int i = 0; i < nlines; i++)
{
try
{
std::vector<double> iVector(ncolumns);
myVector[i] = iVector;
}
catch (std::exception& e)
{
/* catches a bad_alloc here */
}
}
}
當nlines
大約為500,000( ncolumns
通常小於10)時,此代碼似乎可以工作,但是當我在nlines
= 2,600,000的完整數據集上嘗試此操作時,我得到bad_alloc異常。
我有12 GB的內存,並且在運行程序時查看我的內存使用率,從28%(啟動前)到42%(拋出異常時)。 因此,看起來我仍然有可用的內存。
我發現這篇文章說向量在堆上分配了它們的內存。 根據此帖子 (鏈接到此MSDN頁面),我可以設置代碼可以使用的堆(以字節為單位)。 最初,堆提交大小和堆保留大小為空白。 當我輸入2000000000(2 GB)的值時,我仍然遇到相同的問題。
為了使事情更有趣,此C ++代碼(非CLI)是使用C#.NET應用程序中的互操作調用的。 對堆提交大小和堆保留大小的修改是在C ++項目上設置的。 我不知道是否還需要在.NET項目中進行設置,或者如何設置。
任何建議或幫助,將不勝感激。
正如Neil Kirk指出的那樣, 此MSDN頁面中所述,32位進程僅限於2GB內存。 對於無人值守和托管應用程序,這是正確的。
有很多關於此的問題,例如,我發現了這些問題:
以我為例,我認為.NET和非托管代碼之間的互操作正在進行某些緩沖,因此正在占用可用內存。 理想情況下,我應該只有2個或3個2,600,000 x 10個元素的2D向量(如果雙精度數是8字節,那么它仍然小於1 GB)。 我將需要對此進行進一步調查。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.